콘텐츠로 건너뛰기

파이썬 튜토리얼: pypdf 사용법과 문제 해결

[

pypdf로 PDF 파일 다루기

소개

Portable Document Format(PDF)는 문서를 신뢰성 있게 표시하고 교환하기 위해 사용되는 파일 형식입니다. PDF는 원래 Adobe에서 개발되었으나, 현재는 국제 표준화 기구인 ISO에서 관리하는 열린 표준이 됐습니다. Python에서는 PyPDF2 패키지를 사용하여 기존의 PDF 파일과 작업할 수 있습니다.

이 글을 마치기 전에, 다음과 같은 작업을 수행하는 방법을 익힐 것입니다:

  • PDF에서 문서 정보 추출하기
  • 페이지 회전하기
  • PDF 병합하기
  • PDF 분할하기
  • 워터마크 추가하기
  • PDF 암호화하기

자, 시작해봅시다!

pyPdf, PyPDF2, 그리고 PyPDF4의 역사

오리지널 pyPdf 패키지는 2005년에 처음 출시되었습니다. pyPdf의 공식적인 마지막 릴리스는 2010년이었습니다. 1년 가량의 기간이 흐른 후, Phasit이라는 회사에서 pyPdf의 분기인 PyPDF2를 후원했습니다. PyPDF2는 원본과 호환되도록 작성되었으며, 2016년까지 잘 사용되었습니다.

PyPDF3이라는 패키지가 잠깐 릴리스되었으며, 그 후 프로젝트는 PyPDF4로 이름이 변경되었습니다. 이들 프로젝트는 모두 거의 동일한 작업을 수행하지만, pyPdf와 PyPDF2+ 사이의 가장 큰 차이점은 후자 버전에 Python 3 지원이 추가된 것입니다. Python 3용 다른 pyPdf 분기인 pyPdf for Python 3도 있지만, 이 분기는 오랫동안 유지되지 않았습니다.

PyPDF2는 2016년에 사용 중단되었으나, 2022년에 다시 부활하였고 현재 활발히 유지되고 있습니다. PyPDF4PyPDF2와 완전히 호환되지 않습니다. 이 글의 대부분의 예제는 PyPDF4에서도 작동하지만, 일부는 작동하지 않을 수 있으므로 PyPDF4는 이 글에 더 많이 사용되지 않습니다. PyPDF2로 가져온 인포트를 PyPDF4로 교체하여 동작을 확인해보세요.

pdfrw: 대체재

Patrick Maupin은 PyPDF2와 유사한 작업을 수행할 수 있는 pdfrw 패키지를 만들었습니다. pdfrwPyPDF2를 이 글에서 배울 작업과 동일한 작업에 사용할 수 있습니다. 다만, 암호화 기능은 지원하지 않습니다.

pdfrw의 가장 큰 차이점은 ReportLab 패키지와 통합되어 기존 PDF를 사용하여 ReportLab을 사용해 새로운 PDF를 만들 수 있다는 점입니다.

설치

PyPDF2를 설치하는 방법은 일반 Python 대신 Anaconda를 사용하는 경우 pip 또는 conda로 수행할 수 있습니다.

다음은 pip을 사용하여 PyPDF2를 설치하는 방법입니다:

Terminal window
$ pip install PyPDF2

PyPDF2에는 의존성이 없으므로 설치가 매우 빠릅니다. 다운로드하는 시간만큼 설치하는데 시간을 소요할 것입니다.

예제 코드

PDF에서 문서 정보 추출하기

import PyPDF2
# PDF 열기
file_path = 'document.pdf'
with open(file_path, 'rb') as file:
pdf_reader = PyPDF2.PdfReader(file)
# 문서 정보 추출
num_pages = len(pdf_reader.pages)
creator = pdf_reader.docinfo.creator
# 결과 출력
print(f"페이지 수: {num_pages}")
print(f"작성자: {creator}")

페이지 회전하기

import PyPDF2
# PDF 열기
file_path = 'document.pdf'
with open(file_path, 'rb') as file:
pdf_reader = PyPDF2.PdfReader(file)
# 페이지 회전
page_index = 0
new_rotation = 90
pdf_reader.pages[page_index].rotate_clockwise(new_rotation)
# 회전된 페이지 저장
with open('rotated.pdf', 'wb') as output:
pdf_writer = PyPDF2.PdfWriter()
for page in pdf_reader.pages:
pdf_writer.add_page(page)
pdf_writer.write(output)

PDF 병합하기

import PyPDF2
# PDF 파일 경로 리스트
file_paths = ['document1.pdf', 'document2.pdf', 'document3.pdf']
# 병합할 PDF 열기
pdf_writer = PyPDF2.PdfWriter()
for path in file_paths:
with open(path, 'rb') as file:
pdf_reader = PyPDF2.PdfReader(file)
for page in pdf_reader.pages:
pdf_writer.add_page(page)
# 병합된 PDF 저장
with open('merged.pdf', 'wb') as output:
pdf_writer.write(output)

PDF 분할하기

import PyPDF2
# PDF 열기
file_path = 'document.pdf'
with open(file_path, 'rb') as file:
pdf_reader = PyPDF2.PdfReader(file)
# 각 페이지를 개별적으로 저장
for i, page in enumerate(pdf_reader.pages):
with open(f"page_{i+1}.pdf", 'wb') as output:
pdf_writer = PyPDF2.PdfWriter()
pdf_writer.add_page(page)
pdf_writer.write(output)

워터마크 추가하기

import PyPDF2
# 워터마크로 사용할 PDF 열기
with open('watermark.pdf', 'rb') as file:
watermark_reader = PyPDF2.PdfReader(file)
watermark_page = watermark_reader.pages[0]
# 대상 PDF 열기
with open('document.pdf', 'rb') as file:
pdf_reader = PyPDF2.PdfReader(file)
# 워터마크를 각 페이지에 추가
pdf_writer = PyPDF2.PdfWriter()
for page in pdf_reader.pages:
page.merge_page(watermark_page)
pdf_writer.add_page(page)
# 워터마크가 추가된 PDF 저장
with open('watermarked.pdf', 'wb') as output:
pdf_writer.write(output)

PDF 암호화하기

import PyPDF2
# PDF 암호화
file_path = 'document.pdf'
password = 'mypassword'
output_path = 'encrypted.pdf'
with open(file_path, 'rb') as file:
pdf_reader = PyPDF2.PdfReader(file)
pdf_writer = PyPDF2.PdfWriter()
# 암호 설정
pdf_writer.encrypt(password)
# 페이지 추가
for page in pdf_reader.pages:
pdf_writer.add_page(page)
# 암호화된 PDF 저장
with open(output_path, 'wb') as output:
pdf_writer.write(output)

결론

이 글에서는 Python을 사용하여 PDF 파일을 다루는 방법을 알아봤습니다. PyPDF2 패키지를 사용하여 다양한 작업을 수행할 수 있습니다. PDF에 대한 자세한 조작이 필요한 경우 pdfrw 패키지도 고려해볼 수 있습니다.