[Python] 파이썬으로 PDF 내용 추출하는 방법 – PyMuPDF(fitz) 활용

2025. 3. 26. 16:55·프로그래밍/Python

[Python] 파이썬으로 PDF 내용 추출하는 방법 – PyMuPDF(fitz) 활용

Python으로 PDF 파일을 자동 처리하고 싶을 때, PyMuPDF(fitz)는 가장 강력하고 빠른 라이브러리 중 하나입니다.

텍스트 추출, 이미지 추출, 페이지 분리 등 문서 자동화 업무에 바로 활용할 수 있는 실용적인 기능을 제공합니다.

이 글에서는 PyMuPDF(fitz)를 이용해 PDF에서 텍스트를 추출하는 방법과 이미지 저장, 특정 페이지 추출 등 실무 예제를 함께 정리해드립니다.


✅ 1. PyMuPDF 설치 방법

pip install pymupdf

→ 설치하면 fitz라는 이름으로 import해서 사용합니다.


✅ 2. PDF 전체 텍스트 추출하기


import fitz  # PyMuPDF

doc = fitz.open("sample.pdf")  # PDF 열기

for page in doc:
    text = page.get_text()
    print(text)

doc.close()

→ 페이지별로 반복하면서 텍스트 추출 가능
줄바꿈, 문단 유지도 비교적 잘 되는 편입니다.


✅ 3. 특정 페이지 텍스트 추출하기


page = doc.load_page(2)  # 3번째 페이지 (0부터 시작)
text = page.get_text()
print(text)

→ 페이지 수가 많을 경우 필요한 페이지만 추출해서 성능 최적화 가능


✅ 4. PDF에서 이미지 추출하기


for page_number in range(len(doc)):
    page = doc.load_page(page_number)
    images = page.get_images(full=True)

    for img_index, img in enumerate(images):
        xref = img[0]
        pix = fitz.Pixmap(doc, xref)
        if pix.n < 5:  # RGB
            pix.save(f"page{page_number+1}_img{img_index+1}.png")
        else:  # CMYK → RGB 변환
            pix = fitz.Pixmap(fitz.csRGB, pix)
            pix.save(f"page{page_number+1}_img{img_index+1}.png")

→ 이미지가 포함된 PDF에서 내장 이미지 추출이 가능합니다.
스크린샷이 아닌 원본 이미지 그대로 추출됩니다.


✅ 5. 특정 페이지 추출해서 새로운 PDF 만들기


new_doc = fitz.open()
new_doc.insert_pdf(doc, from_page=2, to_page=4)  # 3~5페이지 복사
new_doc.save("extracted_pages.pdf")
new_doc.close()

→ 기존 PDF에서 특정 구간만 추출


✅ 6. 텍스트 위치 기반 추출 (고급 기능)


page = doc.load_page(0)
blocks = page.get_text("blocks")  # (x0, y0, x1, y1, "text", block_no)

for block in blocks:
    x0, y0, x1, y1, text, *_ = block
    print(f"[{x0:.0f}, {y0:.0f}] - {text}")

→ 좌표 기반 텍스트 분석이 가능하므로 표 추출, 영역 지정 추출 등의 커스텀 처리가 가능합니다.


📌 마무리

PyMuPDF(fitz)는 단순한 PDF 읽기를 넘어서 텍스트 추출, 이미지 저장, 페이지 조작까지 지원하는 강력한 도구입니다.

보고서 자동화, 문서 검수, 데이터 수집 등에 바로 활용할 수 있는 실무 유틸리티로 추천드립니다 😊

도움이 되셨다면 공감 / 댓글 부탁드립니다!

반응형
저작자표시 비영리 (새창열림)

'프로그래밍 > Python' 카테고리의 다른 글

[Python] 내 컴퓨터 중복 파일 찾기 – 해시값 비교로 이미지/문서 정리하기  (2) 2025.03.28
[Python] 나만의 명언 봇 만들기 – JSON으로 랜덤 출력하기  (2) 2025.03.28
[python] FastAPI에서 async/await으로 비동기 API 만들기 - 느린 작업도 빠르게 처리하기  (0) 2025.03.20
FastAPI에서 POST 요청 처리하기 - 사용자 입력 데이터 받기 예제  (0) 2025.03.20
FastAPI로 빠르고 간단한 파이썬 API 서버 만들기 - 설치부터 기본 예제까지  (0) 2025.03.20
'프로그래밍/Python' 카테고리의 다른 글
  • [Python] 내 컴퓨터 중복 파일 찾기 – 해시값 비교로 이미지/문서 정리하기
  • [Python] 나만의 명언 봇 만들기 – JSON으로 랜덤 출력하기
  • [python] FastAPI에서 async/await으로 비동기 API 만들기 - 느린 작업도 빠르게 처리하기
  • FastAPI에서 POST 요청 처리하기 - 사용자 입력 데이터 받기 예제
큐레이트
큐레이트
저의 일상을 기록하는 블로그입니다.
  • 큐레이트
    큐레이트의 기록
    큐레이트
  • 전체
    오늘
    어제
    • 분류 전체보기 (190) N
      • 국내여행 (37)
        • 애견여행 (33)
        • 맛집여행 (2)
      • 프로그래밍 (82)
        • C# (24)
        • Python (24)
        • Flutter (5)
        • .NET (4)
        • ASP (7)
        • Html (5)
        • Tomcat (2)
        • typescript (3)
        • etc (8)
      • 일상생활 (71) N
        • 다이어트일지 (70) N
        • 기타 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 복이랑스마트스토어
    • 복이랑블로그
  • 공지사항

    • 블로그 소개
  • 인기 글

  • 태그

    국내여행
    다이어트일지
    다이어트 일지
    DevExpress
    일상생활
    HTML
    pt
    운동일지
    오운완
    Flutter
    제주도
    자동매매
    티스토리챌린지
    자동화
    iis
    헬스
    제주도여행
    C#
    Python
    식단관리
    파이썬
    오블완
    애견동반
    FastAPI
    애견여행
    식단
    제주도애견동반여행
    애견동반여행
    체중기록
    다이어트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
큐레이트
[Python] 파이썬으로 PDF 내용 추출하는 방법 – PyMuPDF(fitz) 활용
상단으로

티스토리툴바