Python으로 PDF 파일을 JPG 또는 PNG 이미지로 변환

PDF 파일을 JPG나 PNG로 변환하기 위해서는 몇 가지 외부 라이브러리를 사용할 수 있습니다. 여기서는 가장 대중적인 라이브러리 중 하나인 pdf2image를 사용하는 방법을 설명하겠습니다. pdf2image는 PDF 문서에서 이미지를 추출하여 JPG, PNG 등의 포맷으로 저장할 수 있도록 해줍니다.

Python으로 PDF 파일을 JPG 또는 PNG 이미지로 변환
Photo by Emile Perron / Unsplash

PDF 파일을 JPG나 PNG로 변환하기 위해서는 몇 가지 외부 라이브러리를 사용할 수 있습니다. 여기서는 가장 대중적인 라이브러리 중 하나인 pdf2image를 사용하는 방법을 설명하겠습니다. pdf2image는 PDF 문서에서 이미지를 추출하여 JPG, PNG 등의 포맷으로 저장할 수 있도록 해줍니다.

설치

먼저 필요한 라이브러리를 설치해야 합니다. pdf2image와 PDF 파일을 처리하기 위한 Pillow (PIL Fork) 라이브러리를 설치하세요:

pip install pdf2image Pillow

코드 예제

아래는 PDF 파일의 모든 페이지를 PNG 이미지로 변환하는 간단한 예제 코드입니다.

from pdf2image import convert_from_path

# PDF 파일 경로
pdf_path = 'example.pdf'
# 결과 이미지를 저장할 폴더
output_folder = '/path/to/output/folder'

# PDF 파일을 이미지 리스트로 변환
images = convert_from_path(pdf_path)

# 각 페이지를 이미지 파일로 저장
for i, image in enumerate(images):
    image_path = f'{output_folder}/page_{i + 1}.png'
    image.save(image_path, 'PNG')
    print(f'Saved {image_path}')

여러 페이지 처리

위 코드는 PDF의 모든 페이지를 순회하며 각 페이지를 별도의 이미지 파일로 저장합니다. convert_from_path 함수는 PDF 파일의 각 페이지를 PIL 이미지 객체의 리스트로 반환합니다. 이 리스트를 순회하면서 각 이미지를 원하는 포맷으로 저장할 수 있습니다.

포맷 변환

만약 JPG로 저장하고 싶다면, image.save 함수에서 파일 포맷을 'JPEG'로 지정하고 파일 확장자를 .jpg로 변경하세요.

image.save(image_path, 'JPEG')

고급 설정

convert_from_path 함수는 다양한 파라미터를 제공하여 변환 과정을 세밀하게 조정할 수 있습니다. 예를 들어, 출력 이미지의 DPI를 설정하거나, 특정 페이지만 변환하는 등의 작업이 가능합니다. 공식 문서나 해당 라이브러리의 GitHub 페이지에서 더 많은 정보를 얻을 수 있습니다.

이 방법을 통해 PDF 파일을 이미지로 효율적으로 변환할 수 있으며, 대량의 문서 처리에도 적합합니다.


이미지로 변환할 때 파일 크기를 (예를들어) 200KB 이하로 제한하려면, 이미지를 저장할 때 압축 수준을 조절하거나 해상도를 조절해야 합니다. Pillow 라이브러리를 활용하여 이미지의 품질을 조절하고 저장하는 방법을 살펴보겠습니다.

해상도 조절

이미지의 해상도를 낮추어 파일 크기를 줄일 수 있습니다. 해상도를 낮추면 이미지의 디테일이 감소하므로 적절한 해상도를 찾는 것이 중요합니다.

품질 조절

JPEG 형식으로 저장할 때는 quality 파라미터를 사용하여 품질을 조절할 수 있습니다. PNG의 경우 optimize=True를 설정하여 약간의 파일 크기 감소를 얻을 수 있습니다.

코드 예제

아래 코드는 PDF의 각 페이지를 변환한 후, 이미지의 해상도를 조절하고 파일 크기가 200KB를 넘지 않도록 품질을 조정하는 방법을 보여줍니다. JPEG 형식을 사용하여 예제를 제공하겠습니다.

from pdf2image import convert_from_path
import os

# PDF 파일 경로와 출력 폴더
pdf_path = 'example.pdf'
output_folder = '/path/to/output/folder'

# PDF를 이미지로 변환
images = convert_from_path(pdf_path)

for i, image in enumerate(images):
    # 이미지 해상도 조절 (옵션, 필요에 따라 조정)
    image = image.resize((int(image.width * 0.75), int(image.height * 0.75)), resample=Image.LANCZOS)

    # 초기 품질 설정
    quality = 95
    while True:
        # 이미지 저장 경로 및 파일명
        image_path = f'{output_folder}/page_{i + 1}.jpg'
        # 이미지 저장
        image.save(image_path, 'JPEG', quality=quality)

        # 파일 크기 체크
        if os.path.getsize(image_path) > 200 * 1024:  # 200KB 보다 크면
            quality -= 5  # 품질 5% 감소
            if quality < 10:  # 최소 품질 설정
                break
        else:
            break

    print(f'Saved {image_path} at quality {quality} with size {os.path.getsize(image_path)/1024:.2f}KB')

이 코드는 PDF의 각 페이지를 변환 후, 저장되는 파일의 크기가 200KB를 초과하면 JPEG의 품질을 점진적으로 감소시켜 파일 크기를 줄입니다. 해상도를 조절하는 코드 라인은 옵션으로, 필요에 따라 주석 처리하거나 조절할 수 있습니다. 파일 크기가 원하는 범위에 들어갈 때까지 품질을 조절하는 방식을 사용하므로, 파일 크기와 품질 사이의 균형을 적절히 맞출 수 있습니다.


공식 홈페이지

pdf2image
A wrapper around the pdftoppm and pdftocairo command line tools to convert PDF to a PIL Image list.

Read next