1. PyPDF2를 사용한 PDF 병합
PDF 파일 병합이 필요한 이유
먼저, 왜 PDF 파일을 병합해야 하는지에 대해 알아보자. 흔히 "하나의 PDF가 열 개의 PDF보다 낫다!"라고 말하잖아. 작업 환경에서는 보고서, 연구 결과, 기술 문서 또는 발표 자료 등이 별도의 파일 형태로 제공될 수 있어. 이런 파일들 사이를 계속 오가며 작업하면 불편하기만 한 게 아니라, 뭔가 놓칠 위험도 커. 모든 파일을 하나의 문서로 합치면 데이터를 처리하고 분석하거나 배포하는 데 훨씬 체계적인 접근이 가능해.
또한, PDF 파일 병합은 이후 아카이브화하거나 최종 보고서를 작성하거나 문서의 여러 버전을 결합하여 변경 사항을 추적할 때도 유용해. 가능성은 무궁무진해!
PyPDF2를 사용한 PDF 병합 기본
먼저 PyPDF2를 사용하는 기본 단계부터 시작하자. 여기서는 여러 개의 PDF 파일을 하나로 합치는 스크립트를 작성해볼 거야. 물론, 코드는 각 단계에서 무슨 일이 일어나는지 이해할 수 있도록 주석을 포함할 거야.
import PyPDF2
# PyPDF2 라이브러리에서 PdfMerger 객체 생성
pdf_merger = PyPDF2.PdfMerger()
# 병합하고자 하는 PDF 문서 목록
pdf_files = ['document1.pdf', 'document2.pdf', 'document3.pdf']
# PdfMerger 객체에 각 파일 추가
for file in pdf_files:
pdf_merger.append(file)
# 병합 결과를 새로운 PDF 파일로 저장
output_filename = 'merged_document.pdf'
with open(output_filename, 'wb') as output_file:
pdf_merger.write(output_file)
# 자원 해제를 위해 PdfMerger 객체 닫기
pdf_merger.close()
print(f"병합된 PDF 생성 완료: {output_filename}")
병합된 문서의 순서와 구조
이제 PDF 문서를 병합하는 방법을 배웠으니 페이지 순서에 대해 생각해보자. PyPDF2는 .append() 메서드에 파일을 넘긴 순서대로 페이지를 추가해. 따라서 pdf_files 리스트의 순서가 최종 문서의 순서에 영향을 준다는 점을 기억하자.
2. 개별 페이지 병합
문서를 병합하는 대신 각 문서의 일부 페이지들로 최종 문서를 구성하고 싶다면 PdfMerger 대신 PdfWriter 클래스를 사용해야 해. 예제:
import PyPDF2
# 병합할 PDF 파일 목록
pdf_files = ["file1.pdf", "file2.pdf", "file3.pdf"]
# 병합된 PDF 작성을 위한 PdfWriter 객체 생성
pdf_writer = PyPDF2.PdfWriter()
# 각 PDF 파일 순회
for pdf_file in pdf_files:
with open(pdf_file, "rb") as file:
pdf_reader = PyPDF2.PdfReader(file)
# 각 페이지를 PdfWriter에 추가
for page_num in range(len(pdf_reader.pages)):
# 추가하지 않을 페이지는 건너뛰기 가능
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# 병합된 PDF 저장
with open("merged_document.pdf", "wb") as output_file:
pdf_writer.write(output_file)
이 코드가 어떻게 동작하는지?
- 파일 목록 생성:
pdf_files리스트에 병합해야 할 PDF 문서 경로를 넣어줘. - PdfWriter 초기화:
pdf_writer는 새로운 PDF 파일 생성을 위해 사용돼. - 각 파일 순회: 각 PDF 파일을 읽기 모드로 열어.
- 페이지 추가: 파일의 모든 페이지를
add_page()메서드를 사용해pdf_writer에 추가해. - 결과 저장: 모든 페이지 추가가 끝나면 최종 PDF를
merged_document.pdf에 작성해.
3. 새로운 문서 스타일링
북마크 및 목차 추가
병합된 문서가 너무 커서 탐색하기 힘들다면? 이럴 때 북마크가 빛을 발해! PyPDF2는 간단한 북마크를 추가할 수 있는 기능을 제공해. 병합하는 각 문서에 북마크를 추가해보자.
pdf_merger = PyPDF2.PdfMerger()
# 북마크를 위한 페이지 오프셋
page_offset = 0
for file in pdf_files:
# 현재 문서 읽기
pdf_reader = PyPDF2.PdfReader(file)
# PdfMerger에 문서 추가
pdf_merger.append(file)
# 파일 이름으로 북마크 추가
pdf_merger.add_bookmark(file, page_offset)
# 페이지 오프셋 갱신
page_offset += len(pdf_reader.pages)
with open(output_filename, 'wb') as output_file:
pdf_merger.write(output_file)
pdf_merger.close()
이 트릭은 PDF 문서를 쉽게 탐색할 수 있도록 도와줘.
병합된 파일의 메타데이터 업데이트
병합 후 문서의 메타데이터(작성자, 제목, 키워드 등)를 추가하거나 수정할 수도 있어.
import PyPDF2
pdf_files = ["file1.pdf", "file2.pdf"]
pdf_writer = PyPDF2.PdfWriter()
for pdf_file in pdf_files:
with open(pdf_file, "rb") as file:
pdf_reader = PyPDF2.PdfReader(file)
for page_num in range(len(pdf_reader.pages)):
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# 메타데이터 추가
pdf_writer.add_metadata({
"/Title": "병합된 문서",
"/Author": "이반 이바노프",
"/Subject": "판매 보고서"
})
# 병합된 파일 저장
with open("merged_with_metadata.pdf", "wb") as output_file:
pdf_writer.write(output_file)
이 코드는 문서를 식별하고 구조화하는 데 유용한 메타데이터를 추가해줘.
GO TO FULL VERSION