该选哪个库
| 库 | 许可证 | 依赖 | 最适合 |
|---|---|---|---|
| PyMuPDF4LLM | AGPL 3.0,或付费商业许可 | 只要 pip | 快速准确地处理文字版 PDF,标题和表格 |
| MarkItDown | MIT | 只要 pip | 一次调用处理多种文件格式 |
| Docling | MIT | PyTorch,需下载模型 | 复杂版式、表格、结构化输出 |
| Marker | 代码为 Apache 2.0,模型权重为修改版 OpenRAIL-M 许可 | PyTorch,以及 OCR 用的推理服务器 | 公式多的论文和扫描件,最好有 GPU |
下面的版本是本页顶部日期时的最新版。如果你只有几个 PDF,这些都用不着:我们首页的转换器在浏览器里就能做同样的事。
PyMuPDF4LLM
PyMuPDF 的 Markdown 导出功能。从 PyMuPDF 2.0 起它已包含在 pymupdf 包里,导入名仍是 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 等。
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 苏黎世研究院、现由 LF AI & Data 基金会托管的文档转换工具包。它运行版式、表格和 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 检查。
- 在共用电脑上处理敏感文档: 浏览器转换器不用安装,文件只留在标签页里。
- 想要 token 计数和 RAG 分块又不想自己写: 见 给大模型用的 PDF 转 Markdown。
常见问题
哪个库最快?
对文字版 PDF,MarkItDown 和 PyMuPDF4LLM 在笔记本电脑上每份文档只需不到一秒到几秒。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。各组件见开源许可页面。