최종 업데이트: 2025년 1월 29일

제목 - Python에서 PDF 파일 작업하기

이 문서에서는 Python을 사용하여 PDF 파일을 작업하는 방법을 안내합니다. 이를 위해 pypdf 라이브러리를 사용할 것입니다.

pypdf 라이브러리를 사용하여 Python에서 다음과 같은 작업을 수행하는 방법을 보여드리겠습니다:

  • PDF에서 텍스트 추출하기
  • PDF 페이지 회전하기
  • 여러 PDF 병합하기
  • 각각 파일로 PDF 분할하기
  • PDF 페이지에 워터마크 추가하기

참고: 이 문서에는 많은 유용한 정보가 포함되어 있으므로 가장 관심 있는 섹션으로 자유롭게 건너뛸 수 있습니다! 내용은 쉽게 탐색할 수 있도록 구성되어 있어, 가장 관련 있는 부분에 빠르게 집중할 수 있습니다.

일러스트 - Python에서 PDF 파일 작업하기

샘플 코드

이 문서에서 사용된 모든 샘플 코드는 아래 링크에서 다운로드할 수 있습니다. 코드, 입력 파일 및 출력 파일이 포함되어 있습니다.

pypdf 설치하기

pypdf를 설치하려면 터미널이나 명령 프롬프트에서 다음 명령을 실행하세요:

pip install pypdf

참고: 위 명령은 대소문자를 구분합니다.

1. Python을 사용하여 PDF 파일에서 텍스트 추출하기

코드 설명

1. PDF 리더 객체 생성하기

reader = PdfReader(pdf_file)
  • PdfReader(pdf_file)은 PDF 파일을 리더 객체로 로드합니다.
  • 이 객체를 사용하여 페이지와 그 내용을 액세스할 수 있습니다.

2. 페이지 반복하기

for page_number, page in enumerate(reader.pages, start=1):
  • reader.pages는 PDF의 페이지 목록을 반환합니다.
  • enumerate(..., start=1)1부터 시작하는 페이지 번호를 할당합니다.

3. 추출한 텍스트 출력하기

    print(f"Page {page_number}:")
    print(page.extract_text())
    print("-" * 50)  # 가독성을 위한 구분선
  • page.extract_text()는 현재 페이지에서 텍스트 콘텐츠를 추출합니다.
  • 스크립트는 추출한 텍스트와 페이지 번호를 함께 출력합니다.
  • "-" * 50은 가독성을 위한 구분선 (--------------------------------------------------)을 출력합니다.

코드에 사용된 입력 PDF 파일

코드의 출력

2. Python을 사용하여 PDF 페이지 회전하기

코드 설명

이 코드는 첫 번째 페이지시계 방향으로 90° 회전한 다음 수정된 PDF를 다른 페이지에 영향을 주지 않고 저장합니다.

1. 필수 클래스 가져오기

from pypdf import PdfReader, PdfWriter
  • PdfReader: 입력 PDF 읽기.
  • PdfWriter: 수정 사항이 있는 새 PDF 생성.

2. 입력 및 출력 파일 경로 정의하기

input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
  • 스크립트는 input.pdf에서 읽고 수정된 파일을 rotated_output.pdf로 저장합니다.

3. PDF 읽기 및 작성기 객체 생성하기

reader = PdfReader(input_pdf)
writer = PdfWriter()
  • reader는 기존 PDF를 로드합니다.
  • writer는 수정된 페이지를 저장하는 데 사용됩니다.

4. 첫 번째 페이지를 90도 회전하기

page = reader.pages[0]
page.rotate(90)  # 시계 방향으로 90도 회전
writer.add_page(page)
  • 페이지 1을 추출하고, 90도 회전하여 새 PDF에 추가합니다.

5. 변경 없이 나머지 페이지 추가하기

for i in range(1, len(reader.pages)):
    writer.add_page(reader.pages[i])
  • 나머지 페이지를 반복하여 그대로 추가합니다.

6. 새 PDF 저장하기

with open(output_pdf, "wb") as file:
    writer.write(file)
  • rotated_output.pdf를 쓰기 이진 모드로 열어 새 PDF를 저장합니다.

7. 확인 메시지 출력하기

print(f"Rotated page saved to {output_pdf}")
  • 성공 메시지를 표시합니다.

코드에 사용된 입력 PDF 및 회전된 출력 PDF

스크린샷 Python을 사용하여 PDF 페이지 회전한 스크린샷

3. Python을 사용하여 PDF 파일 병합하기

이 Python 스크립트는 여러 PDF 파일을 디렉토리에서 하나의 PDF로 병합하는 방법을 보여줍니다.

코드 설명

  • 이 스크립트는 지정된 디렉토리(pdfs-to-merge)의 모든 PDF 파일을 자동으로 병합하여 하나의 출력 파일 (merged_output.pdf)을 만듭니다.
  • 출력 디렉토리의 존재를 확인하고 각 PDF의 페이지를 나열된 순서대로 추가합니다.
  • 최종 병합 파일을 output-dir 하위 디렉토리에 출력합니다.

코드 해석

1. 라이브러리 가져오기

import os
from pypdf import PdfReader, PdfWriter
  • os: 파일 시스템과 상호작용하여 디렉토리 읽기 및 파일 경로 관리 등의 작업 수행.
  • PdfReader: PDF 파일의 콘텐츠를 읽습니다.
  • PdfWriter: 새 PDF 파일을 생성하고 씁니다.

2. 디렉토리 및 출력 파일 정의

directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
  • directory: PDF 파일이 저장된 폴더를 지정합니다.
  • output_file: 병합된 PDF의 출력 경로 및 이름을 정의합니다.

3. 출력 디렉토리가 존재하지 않는 경우 생성하기

os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
  • 출력 디렉토리가 존재하는지 확인하고 존재하지 않으면 생성합니다.

4. PdfWriter 객체 생성하기

writer = PdfWriter()
  • writer는 PDF의 모든 페이지를 수집하고 결합하는 데 사용됩니다.

5. 디렉토리의 모든 PDF 파일 순회하기

for file_name in sorted(os.listdir(directory)):
    if file_name.endswith(".pdf"):
        file_path = os.path.join(directory, file_name)
        print(f"Adding: {file_name}")
  • 이 루프는 지정된 디렉토리의 모든 파일을 순회하며 .pdf 확장자를 가진 파일을 확인합니다. sorted()를 사용하여 알파벳 순서로 처리합니다.

6. 각 PDF 읽기 및 페이지를 Writer에 추가하기

reader = PdfReader(file_path)
writer.append(reader)
  • 각 PDF에 대해 PdfReader가 파일을 읽은 후 해당 PDF의 모든 페이지를 writer에 추가합니다.

7. 병합된 PDF를 출력 파일로 저장하기

output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
    writer.write(output_pdf)
  • 모든 페이지를 수집한 후 writer.write()가 병합된 PDF를 지정된 출력 경로에 작성합니다.

8. 확인 메시지 출력하기

print(f"Merged PDF saved as: {output_path}")
  • 병합된 PDF의 저장 위치를 확인하는 성공 메시지를 출력합니다.

코드에 사용된 입력 PDF 파일 및 병합된 출력 PDF

4. Python을 사용하여 PDF 분할하기

코드 설명

위의 Python 스크립트는 PyPDF 라이브러리를 사용하여 PDF를 각기 다른 페이지로 분할합니다. 먼저 출력 디렉토리가 존재하는지 확인한 다음 입력 PDF 파일을 읽습니다. 스크립트는 각 페이지를 순회하여 새로운 PdfWriter 객체를 생성하고 각 페이지를 개별 PDF 파일로 저장합니다. 출력 파일은 순차적으로 명명(예: page_1.pdf, page_2.pdf)되며 output-dir 폴더에 저장됩니다. 마지막으로 각 생성된 파일에 대한 확인 메시지를 인쇄하고 프로세스가 완료되었음을 알립니다.

입력 PDF 및 분할 출력 파일

5. Python을 사용하여 PDF에 워터마크 추가하기

Python에서는 기존 PDF 위에 워터마크 PDF를 중첩하여 PyPDF 라이브러리를 사용하여 PDF에 워터마크를 추가할 수 있습니다. 워터마크 PDF에 단일 페이지가 있는지 확인하여 각 페이지에 올바르게 적용되도록 하세요.

코드 설명

위의 Python 스크립트는 입력 PDF를 읽고 단일 페이지의 워터마크 PDF를 추출하여 입력 PDF의 각 페이지에 워터마크를 오버레이하고 최종 워터마크 PDF를 저장합니다.

코드 해석

각 부분의 간략한 설명입니다.

1. 필수 클래스 가져오기

from pypdf import PdfReader, PdfWriter
  • **PdfReader**는 기존 PDF를 읽는 데 사용됩니다.
  • **PdfWriter**는 새 PDF를 생성하고 작성하는 데 사용됩니다.

2. 파일 경로 정의하기

input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
  • input_pdf: 워터마크가 추가될 원본 PDF.
  • watermark_pdf: 별도의 단일 페이지 PDF로, 워터마크로 사용됩니다.
  • output_pdf: 워터마크가 추가된 페이지가 담긴 출력 파일입니다.

3. PDF 읽기

reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
  • reader: 입력 PDF를 읽습니다.
  • watermark: 워터마크 PDF를 읽습니다.

4. 작성기 객체 생성하기

writer = PdfWriter()
  • 최종 워터마크 PDF를 생성하는 데 사용됩니다.

5. 워터마크 페이지 추출

watermark_page = watermark.pages[0]
  • 워터마크 PDF에 단일 페이지만 있다고 가정하며, 이는 모든 페이지에 오버레이됩니다.

6. 입력 PDF 페이지 순회 및 워터마크 병합하기

for page in reader.pages:
    # 현재 페이지와 워터마크 병합
    page.merge_page(watermark_page)
    
    # 병합된 페이지를 작성기에 추가
    writer.add_page(page)
  • input_pdf의 각 페이지를 반복합니다.
  • **merge_page(watermark_page)**는 워터마크를 현재 페이지에 오버레이합니다.
  • 수정된 페이지를 writer에 추가합니다.

7. 워터마크된 PDF 저장하기

with open(output_pdf, "wb") as output_file:
    writer.write(output_file)
  • 수정된 페이지를 새 PDF 파일로 작성합니다.

8. 확인 메시지 출력하기

print(f"Watermarked PDF saved as: {output_pdf}")
  • 확인을 위한 출력 파일 경로를 출력합니다.

입력 PDF, 워터마크 PDF 및 출력 워터마크 PDF

스크린샷 Python을 사용하여 워터마크 PDF 생성한 스크린샷

결론

본 가이드에서는 Python에서 중요 PDF 작업을 탐색하여 텍스트 추출, 페이지 회전, 병합, 분할 및 워터마크 추가 방법을 다루었습니다. 이 기술을 통해 이제 나만의 PDF 관리자를 구축하고 다양한 PDF 작업을 효율적으로 자동화할 수 있습니다.