1. PDF 문서를 페이지별로 분할하기
PyPDF2로 PDF 문서 분할의 기초
PyPDF2는 PDF 파일을 열고 페이지를 읽을 수 있는 PdfReader 클래스와, 페이지를 새 PDF 문서로 기록할 수 있는 PdfWriter 클래스를 제공합니다. 문서를 개별 페이지로 분할하려면 PdfWriter에서 add_page()를 사용하여 원하는 페이지를 별도 파일로 저장하면 됩니다.
PDF 페이지를 개별 문서로 저장하기
이 코드는 문서를 분할하여 원본 파일의 각 페이지를 위한 개별 PDF 파일을 생성합니다.
import PyPDF2
# PDF 파일 열기
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
# 각 페이지를 순환
for page_num in range(len(pdf_reader.pages)):
pdf_writer = PyPDF2.PdfWriter()
# 페이지 추출 후 새 PDF에 추가
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# 현재 페이지를 개별 PDF 파일로 저장
output_filename = f"page_{page_num + 1}.pdf"
with open(output_filename, "wb") as output_file:
pdf_writer.write(output_file)
print("각 페이지가 개별 파일로 저장되었습니다.")
이 예제에서는 원본 문서의 각 페이지가 page_1.pdf, page_2.pdf 등으로 개별 파일에 저장됩니다.
2. 페이지 범위 추출하기
때로는 모든 페이지가 아니라 특정 페이지 범위(예: 1페이지부터 5페이지까지)를 저장해야 할 때가 있습니다. 이를 위해 루프에서 특정 페이지를 지정할 수 있습니다.
import PyPDF2
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
pdf_writer = PyPDF2.PdfWriter()
# 페이지 범위 정의, 예: 1페이지부터 5페이지까지
start_page = 1
end_page = 5
for page_num in range(start_page - 1, end_page): # 페이지 번호는 0부터 시작합니다.
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# 범위 페이지를 새 PDF로 저장
with open("pages_1_to_5.pdf", "wb") as output_file:
pdf_writer.write(output_file)
print("페이지 범위가 성공적으로 저장되었습니다.")
이 코드는 1페이지부터 5페이지까지의 페이지를 추출하여 pages_1_to_5.pdf 파일에 저장합니다.
3. 여러 범위 저장하기
여러 페이지 범위를 추출하여 별도로 저장해야 하는 경우, 시작 및 끝 페이지를 입력으로 받는 함수를 사용할 수 있습니다.
import PyPDF2
def save_page_range(input_pdf, output_pdf, start_page, end_page):
with open(input_pdf, "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
pdf_writer = PyPDF2.PdfWriter()
for page_num in range(start_page - 1, end_page):
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
with open(output_pdf, "wb") as output_file:
pdf_writer.write(output_file)
print(f"페이지 {start_page}–{end_page}가 {output_pdf}에 저장되었습니다")
# 다른 범위를 추출하기 위한 함수 사용
save_page_range("sample.pdf", "section_1.pdf", 1, 3)
save_page_range("sample.pdf", "section_2.pdf", 4, 6)
이 코드는 1페이지에서 3페이지까지, 4페이지에서 6페이지까지의 페이지를 각각 section_1.pdf와 section_2.pdf에 저장하는 함수입니다.
4. PDF 문서 대량 처리
폴더 내 모든 PDF 페이지의 자동 분할
지정된 폴더 내 모든 PDF 문서 페이지를 분할하려면 각 파일을 자동으로 처리하는 스크립트를 작성할 수 있습니다.
import PyPDF2
import os
# PDF 파일이 있는 폴더 경로
folder_path = "pdf_folder"
# 폴더 내 모든 PDF 파일의 자동 분할
for filename in os.listdir(folder_path):
if filename.endswith(".pdf"):
file_path = os.path.join(folder_path, filename)
with open(file_path, "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
# 파일을 개별 페이지로 분할
for page_num in range(len(pdf_reader.pages)):
pdf_writer = PyPDF2.PdfWriter()
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# 출력 파일 이름 생성
output_filename = f"{filename[:-4]}_page_{page_num + 1}.pdf"
output_path = os.path.join(folder_path, output_filename)
# 페이지 저장
with open(output_path, "wb") as output_file:
pdf_writer.write(output_file)
print("폴더 내 모든 PDF 파일의 각 페이지가 성공적으로 저장되었습니다.")
이 스크립트는 pdf_folder 폴더 내 모든 PDF 파일을 처리하고 각 페이지를 <파일명>_page_<번호>.pdf로 저장합니다.
5. PDF 파일을 분할해야 하는 경우는?
한 위대한 개발자가 말했듯이, 긴 코딩 세션 끝에 "왜?"라는 질문이 자주 떠오릅니다. PDF 문서 분할은 다양한 상황에서 필요할 수 있습니다:
- 중요 페이지 추출: 동료들에게 완전한 "전쟁과 평화"를 보내지 않고 필요한 페이지만 공유하세요.
- 모음집 만들기: 다양한 문서에서 중요한 챕터를 하나의 파일에 저장하여 학습이나 업무에 활용하세요.
- 아카이빙: 중요한 데이터를 페이지별로 보관하여 불필요한 페이지 사이에서 중요한 정보를 잃지 않도록 하세요.
바로 이럴 때 우리의 영웅 PyPDF2가 여러분의 삶을 더 편하게 만들어줍니다!
6. 예상치 못한 어려움과 이를 피하는 방법
PDF 문서를 처리할 때 몇 가지 어려움에 직면할 수 있습니다. 예를 들어, PyPDF2에서는 페이지 번호가 0부터 시작하므로 필요한 페이지를 지정할 때 이를 고려하세요. 잘못된 페이지를 추출하는 것만큼 시간을 낭비하는 일은 없습니다!
또한 파일을 열고 닫는 작업을 할 때, 모든 close()가 올바르게 호출되었는지 확인하세요. 한 권의 열려 있는 책이 고통이 될 수 있습니다, 특히 그것이 오라클 교과서라면 더욱 그렇겠죠.
실제 생활에서의 활용
이 방법은 개인 문서 처리에만 유용한 것이 아닙니다. 예를 들어, 법률 회사에서 일하며 법정에 제출하기 위해 대형 사건에서 특정 섹션을 신속하게 준비해야 하는 경우, PDF를 분할하는 것은 시간과 비용을 크게 절약할 수 있습니다.
이러한 기술은 학습 자료 준비, 기술 보고서에서 중요한 섹션 강조 등에도 사용할 수 있습니다. 진정한 마법은 이러한 반복 작업을 얼마나 간단하게 자동화할 수 있는지에 달려 있습니다!
GO TO FULL VERSION