Python

파이썬 PDF (Portable Document Format) 처리, Fitz (PyMuPDF) 하나면 끝!

드리프트2 2025. 3. 22. 17:42

파이썬 PDF (Portable Document Format) 처리, Fitz (PyMuPDF) 하나면 끝!

 

안녕하세요!

오늘은 파이썬 (Python)에서 PDF (Portable Document Format) 파일을 자유자재로 다룰 수 있게 해주는 정말 유용한 라이브러리, Fitz (피츠), 다른 이름으로는 PyMuPDF (파이뮤PDF)라고도 불리는 라이브러리에 대해 알아보려고 합니다.

Fitz (피츠)만 있으면 파이썬 (Python)으로 PDF (Portable Document Format) 파일을 열고, 원하는 대로 편집하고, 필요한 정보를 쏙쏙 뽑아내는 게 정말 쉬워진답니다.

어떻게 사용하는지 궁금하시죠?

지금부터 Fitz (피츠) 사용법을 쉽고 자세하게 알려드릴게요.

  1. 핵심 요약
  • Fitz (PyMuPDF)는 파이썬 (Python)에서 PDF (Portable Document Format) 파일을 편집하는 걸 정말 쉽게 만들어줍니다. 텍스트 추출, 병합, 편집은 기본이고요.
  • PDF (Portable Document Format) 문서에서 이미지나 메타데이터를 추출하는 것도 아주 간단하게 할 수 있도록 직관적인 방법들을 제공합니다.
  • 코드 몇 줄만으로 PDF (Portable Document Format) 파일을 수정하고 새로 만드는 것도 가능합니다.
  1. 설치

Fitz (피츠)를 사용하기 전에 PyMuPDF (파이뮤PDF) 라이브러리부터 설치해야겠죠?

pip 명령어로 간단하게 설치할 수 있습니다.

pip install pymupdf
  1. 라이브러리 불러오기

이제 파이썬 (Python) 코드에서 Fitz (피츠) 라이브러리를 불러와 볼까요?

import fitz  # PyMuPDF
  1. PDF (Portable Document Format) 문서 열기

PDF (Portable Document Format) 파일을 열 때는 fitz.open() 함수를 사용합니다.

파일 이름만 넣어주면 끝!

pdf_document = fitz.open('example.pdf')
  1. 문서 정보 확인하기

PDF (Portable Document Format) 문서에 대한 다양한 정보를 쉽게 얻어올 수 있습니다.

  • 페이지 수 확인
# 페이지 수
num_pages = pdf_document.page_count
print(f'문서의 페이지 수: {num_pages} 페이지입니다.')
  • 메타데이터 확인
# 메타데이터
metadata = pdf_document.metadata
print('메타데이터:', metadata)
  1. 페이지에서 텍스트 추출하기

PDF (Portable Document Format) 페이지에서 텍스트만 쏙 뽑아내는 방법, 알아볼까요?

  • 특정 페이지 텍스트 추출
# 특정 페이지 로드 (0부터 시작하는 인덱스 사용)
page_number = 0
page = pdf_document.load_page(page_number)

# 텍스트 추출
text = page.get_text()
print(f'{page_number + 1} 페이지 텍스트:\n{text}')
  • 모든 페이지 텍스트 추출
for page_num in range(pdf_document.page_count):
    page = pdf_document.load_page(page_num)
    text = page.get_text()
    print(f'{page_num + 1} 페이지 텍스트:\n{text}')
  1. 페이지에서 이미지 추출하기

이번에는 페이지에서 이미지를 추출하는 방법인데요.

이미지도 정말 쉽게 뽑아낼 수 있습니다.

  • 특정 페이지 이미지 추출
# 페이지 로드
page = pdf_document.load_page(page_number)

# 페이지에서 이미지 가져오기
image_list = page.get_images(full=True)
print(f'{page_number + 1} 페이지에서 {len(image_list)}개의 이미지를 찾았습니다.')

# 각 이미지 처리
for img_index, img in enumerate(image_list, start=1):
    xref = img[0]
    base_image = pdf_document.extract_image(xref)
    image_bytes = base_image["image"]

    # 이미지 저장
    with open(f'image_page{page_number + 1}_{img_index}.png', 'wb') as image_file:
        image_file.write(image_bytes)
  1. 페이지에 텍스트 추가하기

PDF (Portable Document Format) 페이지에 텍스트를 추가하는 것도 간단합니다.

# 페이지 로드
page = pdf_document.load_page(page_number)

# 텍스트 내용과 위치 설정
text = "안녕하세요, PyMuPDF!"
position = fitz.Point(100, 100)

# 페이지에 텍스트 추가
page.insert_text(position, text, fontsize=12, color=(0, 0, 0))

# 변경 사항 저장
pdf_document.save('modified_example.pdf')
  1. PDF (Portable Document Format) 문서 합치기

두 개의 PDF (Portable Document Format) 문서를 하나로 합치는 방법도 알아볼까요?

# 문서 열기
pdf1 = fitz.open('document1.pdf')
pdf2 = fitz.open('document2.pdf')

# pdf2를 pdf1에 삽입
pdf1.insert_pdf(pdf2)

# 합쳐진 문서 저장
pdf1.save('merged_document.pdf')
  1. PDF (Portable Document Format) 문서 분할하기

PDF (Portable Document Format) 문서에서 특정 페이지만 뽑아서 새로운 PDF (Portable Document Format) 문서를 만드는 방법입니다.

# 원본 문서 열기
pdf_document = fitz.open('example.pdf')

# 추출한 페이지를 담을 새 PDF (Portable Document Format) 문서 생성
new_pdf = fitz.open()

# 추출할 페이지 범위 설정 (예: 2페이지부터 4페이지까지)
start_page = 1  # 0부터 시작하는 인덱스
end_page = 4    # exclusive (포함X)

# 지정된 페이지를 새 PDF (Portable Document Format) 문서에 삽입
new_pdf.insert_pdf(pdf_document, from_page=start_page, to_page=end_page)

# 새 PDF (Portable Document Format) 문서 저장
new_pdf.save('extracted_pages.pdf')

 

11. 문서 닫기

PDF (Portable Document Format) 문서 작업을 다 끝냈으면, 열어둔 문서를 닫아서 리소스를 해제해주는 것이 좋습니다.

pdf_document.close()

 

Fitz (PyMuPDF)는 파이썬 (Python)에서 PDF (Portable Document Format) 파일을 다루는 데 필요한 거의 모든 기능을 제공하는 정말 유용한 라이브러리입니다.

텍스트 추출, 내용 수정, 문서 병합, 분할 등 다양한 작업을 Fitz (피츠) 하나로 간편하게 처리할 수 있다는 점이 정말 매력적인데요.

더 자세한 정보나 고급 기능이 궁금하시다면 PyMuPDF (파이뮤PDF) 공식 문서