Python으로 PDF를 Markdown으로

PDF를 Markdown으로 바꾸는 라이브러리 네 가지. 각각의 설치 명령과 동작하는 코드, 라이선스가 허용하는 것, 고르는 방법을 담았습니다.

최종 업데이트: 2026-11-13

어떤 라이브러리를 고를까

라이브러리라이선스필요한 것잘 맞는 용도
PyMuPDF4LLMAGPL 3.0, 또는 유료 상용 라이선스pip만빠르고 정확한 텍스트 PDF, 제목과 표
MarkItDownMITpip만한 번의 호출로 여러 파일 형식
DoclingMITPyTorch, 모델 다운로드복잡한 레이아웃, 표, 구조화된 출력
Marker코드는 Apache 2.0, 모델 가중치는 수정된 OpenRAIL-M 라이선스PyTorch, 그리고 OCR용 추론 서버수식이 많은 논문과 스캔본, 가급적 GPU에서

아래 버전은 이 페이지 맨 위 날짜 기준입니다. PDF가 몇 개뿐이라면 어느 것도 필요 없습니다. 홈페이지의 변환기가 브라우저에서 같은 일을 합니다.

PyMuPDF4LLM

PyMuPDF의 Markdown 내보내기 기능입니다. PyMuPDF 2.0부터 pymupdf 패키지에 들어 있으며, import 이름은 그대로 pymupdf4llm입니다.

pip install pymupdf
import pymupdf4llm

md = pymupdf4llm.to_markdown("report.pdf")
open("report.md", "w", encoding="utf-8").write(md)

유용한 옵션:

# 일부 페이지만(0부터 시작), 페이지마다 메타데이터가 붙은 dict로
pages = pymupdf4llm.to_markdown("report.pdf", pages=[0, 1, 2], page_chunks=True)
for p in pages:
    print(p["metadata"]["page_number"], len(p["text"]))

스캔한 페이지에는 OCR 엔진도 설치하세요. pip install rapidocr onnxruntime을 하면 PyMuPDF가 텍스트 층이 없는 페이지도 읽습니다.

라이선스: PyMuPDF는 GNU AGPL 3.0과 Artifex 상용 라이선스의 이중 라이선스입니다. AGPL은 소프트웨어를 배포하거나 네트워크 서비스로 제공하면 내 소스 코드도 공개하도록 요구하므로, 비공개 제품에 쓰기 전에 확인하세요.

벤치마크에서 PyMuPDF4LLM 2.1은 본문의 평균 99%를 남겼고, 평가한 세 변환기 중 읽기 순서가 가장 정확했습니다.

MarkItDown

PDF, Word, PowerPoint, Excel, HTML, EPUB 등 여러 형식을 다루는 Microsoft의 변환기입니다.

pip install 'markitdown[pdf]'
from markitdown import MarkItDown

md = MarkItDown()
result = md.convert("report.pdf")
open("report.md", "w", encoding="utf-8").write(result.markdown)

명령줄에서는 markitdown report.pdf -o report.md입니다.

라이선스: MIT.

알아 둘 점: PDF는 pdfminer.six와 pdfplumber로 텍스트를 뽑습니다. 결과에 제목이 없고, PDF의 줄바꿈과 줄 끝 하이픈이 남으며, 기본 설치에는 OCR이 없습니다. 여러 사무용 파일 더미에 PDF가 조금 섞여 있을 때 알맞은 선택입니다. 자세한 내용은 MarkItDown 페이지에 있습니다.

Docling

IBM Research Zurich에서 시작해 지금은 LF AI & Data Foundation이 호스팅하는 문서 변환 툴킷입니다. 레이아웃, 표, OCR 모델을 돌리므로 PyTorch를 설치하고 처음 쓸 때 모델을 내려받습니다. PDF 외에 Word, PowerPoint, Excel, HTML, 이미지 등도 읽습니다.

pip install docling
from docling.document_converter import DocumentConverter

converter = DocumentConverter()
result = converter.convert("report.pdf")
md = result.document.export_to_markdown()
open("report.md", "w", encoding="utf-8").write(md)

명령줄에서는 docling report.pdf로 현재 폴더에 .md 파일을 씁니다.

라이선스: MIT. Markdown 외에 HTML, 그리고 나중 처리를 위해 레이아웃 정보를 보존하는 무손실 JSON 형식으로도 내보낼 수 있습니다.

Marker

자체 비전 모델을 중심으로 만든 Datalab의 변환기입니다. 수식과 스캔본에 강하지만 돌리기는 무겁습니다.

pip install marker-pdf

Marker는 PyTorch가 필요하고, OCR을 위해 처음 쓸 때 추론 서버를 띄웁니다. NVIDIA GPU에서는 vLLM, CPU나 Apple Silicon에서는 llama.cpp의 llama-server 바이너리입니다.

from marker.converters.pdf import PdfConverter
from marker.models import create_model_dict
from marker.output import text_from_rendered

converter = PdfConverter(artifact_dict=create_model_dict())
rendered = converter("report.pdf")
text, _, images = text_from_rendered(rendered)
open("report.md", "w", encoding="utf-8").write(text)

명령줄에서는 marker_single report.pdf입니다.

라이선스: 코드는 Apache 2.0입니다. 모델 가중치는 수정된 AI Pubs OpenRAIL-M 라이선스로, 연구, 개인 용도, 투자 유치액이나 매출이 500만 달러 미만인 스타트업에는 무료입니다. 그보다 큰 상업적 사용에는 Datalab의 라이선스가 필요합니다.

폴더 안의 PDF 한꺼번에 변환하기

같은 반복문이 어느 라이브러리에서나 통합니다. 여기서는 PyMuPDF4LLM으로:

from pathlib import Path
import pymupdf4llm

src, out = Path("pdfs"), Path("markdown")
out.mkdir(exist_ok=True)
for pdf in sorted(src.glob("*.pdf")):
    try:
        md = pymupdf4llm.to_markdown(str(pdf))
    except Exception as e:  # 손상되거나 암호화된 파일 때문에 전체가 멈추지 않게
        print(f"skipped {pdf.name}: {e}")
        continue
    (out / f"{pdf.stem}.md").write_text(md, encoding="utf-8")

스크립트가 맞지 않는 경우

  • 파일 몇 개를 한 번만: 환경을 꾸리는 것보다 변환기에 놓는 편이 빠르고, 페이지마다 Markdown과 비교할 수 있습니다.
  • 공용 컴퓨터에서 민감한 문서: 브라우저 변환기는 설치가 필요 없고 파일을 탭 안에 둡니다.
  • 토큰 수와 RAG 청크를 직접 짜지 않고 쓰고 싶을 때: LLM용 PDF를 Markdown으로를 보세요.

자주 묻는 질문

가장 빠른 라이브러리는?

텍스트 PDF라면 MarkItDown과 PyMuPDF4LLM은 노트북에서 문서당 1초도 안 되는 시간에서 몇 초 사이입니다. Docling과 Marker는 신경망 모델을 돌리므로 GPU 없이는 훨씬 느립니다.

표를 가장 잘 다루는 것은?

저희가 잰 둘 중에서는 PyMuPDF4LLM이 제대로 된 Markdown 표를 만들었고, MarkItDown은 대부분 그러지 못했습니다. Docling과 Marker는 둘 다 표 모델을 쓰고 복잡한 표에 자주 추천됩니다. 내 문서로 시험해 보세요.

상용 제품에 써도 되나요?

MarkItDown과 Docling은 MIT라 허용됩니다. PyMuPDF는 AGPL을 따르거나 상용 라이선스가 필요합니다. Marker의 코드는 Apache 2.0이지만 모델 가중치에는 상업적 사용에 대한 매출 한도가 있습니다.

JavaScript 선택지가 있나요?

pdftomd 자체가 브라우저에서 JavaScript와 WebAssembly로 돌아갑니다. 텍스트 엔진은 오픈 소스 @firecrawl/pdf-inspector-wasm 패키지이고, OCR은 ONNX Runtime Web에서 도는 PaddleOCR입니다. 구성 요소마다 라이선스 페이지를 보세요.