파이썬에서 PDF 처리를 위해 Fitz(PyMuPDF)를 사용하는 방법
Takashi Yamamoto
Infrastructure Engineer · Leapcell

Fitz는 PyMuPDF라고도 하며, PDF 문서를 다루기 위한 강력한 Python 라이브러리입니다. 이를 통해 PDF 파일을 쉽게 열고, 조작하고, 정보를 추출할 수 있습니다. 이 기사에서는 Python에서 Fitz를 사용하는 방법을 실제 예제와 함께 살펴보겠습니다.
Key Takeaways
- Fitz (PyMuPDF)는 Python에서 텍스트 추출, 병합 및 편집을 포함한 PDF 조작을 단순화합니다.
- 이 라이브러리는 PDF 문서에서 이미지와 메타데이터를 추출하는 직관적인 방법을 제공합니다.
- Fitz를 사용하면 최소한의 코드로 PDF를 수정하고 생성할 수 있습니다.
설치
Fitz를 사용하기 전에 PyMuPDF 라이브러리가 설치되어 있는지 확인하십시오.
pip install pymupdf
라이브러리 가져오기
라이브러리를 가져오는 것으로 시작합니다.
import fitz # PyMuPDF
PDF 문서 열기
PDF 파일을 열려면 fitz.open()
함수를 사용합니다.
pdf_document = fitz.open('example.pdf')
문서 정보 가져오기
문서에서 다양한 메타데이터를 검색할 수 있습니다.
# 페이지 수 num_pages = pdf_document.page_count print(f'문서에 {num_pages}페이지가 있습니다.') # 메타데이터 metadata = pdf_document.metadata print('메타데이터:', metadata)
페이지에서 텍스트 추출
특정 페이지에서 텍스트를 추출하려면 다음을 수행합니다.
# 특정 페이지 로드 (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}')
페이지에서 이미지 추출
특정 페이지에서 이미지를 추출하려면 다음을 수행합니다.
# 페이지 로드 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)
페이지에 텍스트 추가
특정 페이지에 텍스트를 추가하려면 다음을 수행합니다.
# 페이지 로드 page = pdf_document.load_page(page_number) # 텍스트 및 위치 정의 text = "Hello, PyMuPDF!" position = fitz.Point(100, 100) # 페이지에 텍스트 추가 page.insert_text(position, text, fontsize=12, color=(0, 0, 0)) # 변경 사항 저장 pdf_document.save('modified_example.pdf')
PDF 문서 병합
두 PDF 문서를 병합하려면 다음을 수행합니다.
# 문서 열기 pdf1 = fitz.open('document1.pdf') pdf2 = fitz.open('document2.pdf') # pdf2를 pdf1에 삽입 pdf1.insert_pdf(pdf2) # 병합된 문서 저장 pdf1.save('merged_document.pdf')
PDF 문서 분할
특정 페이지를 새 PDF로 추출하려면 다음을 수행합니다.
# 원본 문서 열기 pdf_document = fitz.open('example.pdf') # 추출된 페이지에 대한 새 PDF 만들기 new_pdf = fitz.open() # 추출할 페이지 범위 정의 (예: 2페이지에서 4페이지) start_page = 1 # 0부터 시작하는 인덱스 end_page = 4 # exclusive # 지정된 페이지를 새 PDF에 삽입 new_pdf.insert_pdf(pdf_document, from_page=start_page, to_page=end_page) # 새 PDF 저장 new_pdf.save('extracted_pages.pdf')
문서 닫기
PDF에 대한 작업을 완료한 후에는 문서를 닫아 리소스를 확보하십시오.
pdf_document.close()
FAQs
load_page()
를 사용하여 페이지를 반복하고 각 페이지에서 get_text()
를 호출합니다.
예, insert_pdf()
를 사용하여 한 PDF에서 다른 PDF로 페이지를 병합합니다.
예, insert_text()
또는 주석 메서드를 사용하여 문서를 수정합니다.
결론
Fitz (PyMuPDF)는 Python에서 PDF 조작을 위한 포괄적인 도구 세트를 제공하여 텍스트 추출, 콘텐츠 수정, 문서 병합 또는 분할과 같은 작업에 유용한 리소스입니다. 자세한 정보 및 고급 기능은 PyMuPDF 설명서를 참조하십시오.
클라우드에 Python 프로젝트를 배포하기 위한 최고의 선택인 Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하세요.
무료로 무제한 프로젝트 배포
- 사용량에 대해서만 지불하고, 요청이나 요금은 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼만 지불합니다.
- 예: $25로 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI。
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합。
- 실행 가능한 통찰력을 위한 실시간 지표 및 로깅。
손쉬운 확장성 및 고성능
- 높은 동시성을 쉽게 처리할 수 있도록 자동 확장。
- 운영 오버헤드가 없어 구축에만 집중하면 됩니다.
설명서에서 자세히 알아보세요!
X에서 팔로우하세요: @LeapcellHQ