用 Python 把 PDF 转成 Markdown

四个能把 PDF 转成 Markdown 的库,每个都附上安装命令和可运行的代码,说明许可证允许什么,以及怎么选。

最近更新: 2026-11-13

该选哪个库

库许可证依赖最适合
PyMuPDF4LLMAGPL 3.0,或付费商业许可只要 pip快速准确地处理文字版 PDF,标题和表格
MarkItDownMIT只要 pip一次调用处理多种文件格式
DoclingMITPyTorch,需下载模型复杂版式、表格、结构化输出
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。各组件见开源许可页面。