Python PDF 생성: Pillow와 ReportLab을 활용한 이미지 처리

이전 포스트를 통해서 Python으로 디렉토리 구조를 탐색하는 방법을 잘 살펴 보셨나요? 자 그럼 이제 한걸음 더 나아가겠습니다. Python을 활용하면 여러 이미지 파일을 하나의 PDF로 변환하는 작업을 매우 간편하게 자동화할 수 있습니다.

이번 포스트에서는 Python PDF를 생성하는 방법에 대해 알아보고, 이를 위해 PillowReportLab 라이브러리를 사용하여 이미지를 처리하고 PDF로 변환하는 방법을 배워보겠습니다. 이미지 파일을 PDF로 묶는 작업은 보고서나 포트폴리오를 만들 때 유용하게 쓰일 수 있습니다. 이번 포스트를 통해 Python PDF 생성에 필요한 기술을 차근차근 익혀보세요.

Python PDF 생성

Pillow 라이브러리: 이미지 처리의 기초

Pillow는 Python에서 이미지 파일을 처리하는 가장 인기 있는 라이브러리 중 하나입니다. 이미지를 열고, 크기를 조정하거나, 다른 형식으로 저장하는 등의 작업을 손쉽게 할 수 있습니다. PDF 생성 작업에서는 이미지의 크기와 해상도를 확인하고, 이를 그대로 PDF로 변환하는 데 사용됩니다.

Pillow 설치 및 기본 사용법

Pillow는 pip을 사용하여 간단하게 설치할 수 있습니다. VS code를 사용한다고 하면 Terminal 창에서 실행하시면 됩니다. 제 컴에는 이미 해당 패키지가 설치되어 있어서 설치요구사항이 이미 만족되어 있다고 나타나고 있습니다.

pip install Pillow
Python PDF 생성 포스트 터미널 캡쳐 그림

설치 후 이미지를 열어 확인하는 간단한 예제를 보겠습니다.

from PIL import Image

img_path = "C:/Users/user/Documents/lease_renewal_process.png"
img = Image.open(img_path)
print(img.size)  # 이미지 크기 출력

이 코드는 Pillow를 사용해 이미지를 열고 해당 이미지의 크기를 출력하는 기본적인 작업을 수행합니다. 이 정보는 이후 PDF를 생성할 때 중요하게 사용됩니다.

ReportLab: PDF 생성의 기초

ReportLab는 Python에서 PDF를 생성하는 데 매우 유용한 라이브러리입니다. 텍스트, 이미지, 도형 등을 자유롭게 추가할 수 있으며, 커스텀 페이지 크기 설정도 가능합니다. 이미지를 PDF로 변환할 때는 이미지의 크기에 맞는 페이지를 설정하고, 그 위에 이미지를 삽입하는 방식으로 작업이 진행됩니다.

ReportLab 설치 및 기본 사용법

ReportLab도 pip 명령을 사용해 설치할 수 있습니다.

pip install reportlab

설치 후 간단한 PDF 파일을 생성하는 예제를 보겠습니다.

from reportlab.pdfgen import canvas

pdf_path = "C:/Users/user/Documents/output.pdf"
c = canvas.Canvas(pdf_path)
c.drawString(100, 750, "Hello, this is a PDF!")
c.save()

이 코드는 “Hello, this is a PDF!”라는 텍스트를 포함한 PDF 파일을 생성합니다. PDF 페이지에 글자뿐만 아니라 이미지도 추가할 수 있으며, 이러한 기능을 활용해 Python PDF를 자동으로 생성하는 다양한 작업을 수행할 수 있습니다.

Python PDF 생성 포스트 pdf 생성결과 캡쳐 그림

이미지에서 PDF로 변환하기

이제 Pillow와 ReportLab을 결합하여 여러 이미지 파일을 하나의 PDF로 변환하는 예제를 살펴보겠습니다. 이 과정에서는 여러 이미지 파일을 불러와서 각각의 크기에 맞는 페이지를 생성하고, 이미지 파일을 그 페이지 위에 삽입하는 방식으로 작업이 진행됩니다.

전체 코드 예제

import os
from PIL import Image
from reportlab.pdfgen import canvas

def process_images(c, dir_path):
    img_list = sorted([img_name for img_name in os.listdir(dir_path) if img_name.endswith(".png")])
    for img_name in img_list:
        img_path = os.path.join(dir_path, img_name)
        img = Image.open(img_path)
        img_width, img_height = img.size
        c.setPageSize((img_width, img_height))  # 이미지 크기에 맞는 페이지 크기 설정
        c.drawInlineImage(img_path, 0, 0, width=img_width, height=img_height)  # 이미지 삽입
        c.showPage()

def create_pdf_from_images(main_dir, output_pdf):
    c = canvas.Canvas(output_pdf)
    process_images(c, main_dir)
    c.save()
    print(f"PDF 파일이 생성되었습니다: {output_pdf}")

main_dir = "C:/Users/user/Documents/images"  # 이미지가 저장된 폴더(자신의 환경에 맞게 조정)
output_pdf = "C:/Users/user/Documents/output.pdf"  # 출력할 PDF 경로(자신의 환경에 맞게 조정)
create_pdf_from_images(main_dir, output_pdf)

코드 설명

  1. process_images 함수: 해당 함수는 지정된 디렉토리에서 PNG 파일을 가져와 이미지를 처리하고, 각각의 이미지 크기에 맞는 페이지를 PDF에 추가합니다.
  2. create_pdf_from_images 함수: 이 함수는 Canvas 객체를 생성하고, 이미지 파일을 처리한 후 PDF로 저장합니다.
  3. Pillow를 사용한 이미지 처리: 각 이미지의 크기를 확인하여 PDF 페이지의 크기를 이미지에 맞게 설정하는 것이 핵심입니다.
  4. ReportLab을 사용한 PDF 생성: Canvas 객체를 통해 각 이미지 파일을 한 페이지씩 PDF로 변환하고, 마지막에 PDF 파일로 저장합니다.

이미지에서 PDF로 변환할 때의 주의사항

Python으로 PDF를 생성할 때는 몇 가지 주의사항이 있습니다. 우선 이미지의 해상도와 크기를 미리 확인해야 하며, 페이지 크기를 너무 작게 설정할 경우 이미지가 제대로 출력되지 않을 수 있습니다. 또한 이미지의 확장자에 따라 다른 처리 방법이 필요할 수 있으므로, 변환하려는 이미지 파일 형식을 명확히 지정해야 합니다.

결론: Python PDF 생성의 유용성

이번 포스트에서는 Python PDF 생성에 대해 알아보고, PillowReportLab을 사용하여 이미지를 PDF로 변환하는 방법을 배웠습니다. 이 기술을 활용하면 다양한 이미지 파일을 한 번에 PDF로 묶어 문서화할 수 있으며, 보고서나 포트폴리오 작성에도 매우 유용합니다. Python PDF를 생성하는 작업을 자동화하고 싶다면 이번 포스트에서 다룬 방법을 따라 해 보세요!

유사한 게시물