用 pymupdf4llm 打造 PDF → Markdown 的高效 LLM 数据管道(附实战对比)
很多朋友在做 知识库问答、RAG 或 文档摘要 时都会遇到一个头痛的问题:PDF 文件怎么转成结构清晰、可检索、能直接输入 LLM 的文本?
如果只是用 pdfminer
、PyPDF2
之类的传统库,通常会遇到:
段落顺序错乱
多栏文本拼在一起
表格丢失
图片缺失
标题/加粗/斜体等完全没了
而 pymupdf4llm 的出现,就解决了这些痛点。它基于 PyMuPDF,把 PDF 转换为 GitHub 风格 Markdown,保留标题、表格、列表、样式,还能导出图片,非常适合直接作为 LLM 输入。
环境准备
安装非常简单:
pip install -U pymupdf4llm
如果需要对扫描版 PDF 做 OCR,可以配合 pytesseract
或其他 OCR 库使用。
Demo 1:基础用法
先把一个 PDF 转成 Markdown 文本:
import pymupdf4llmmd_text = pymupdf4llm.to_markdown("sample.pdf")with open("output.md", "w", encoding="utf-8") as f:f.write(md_text)
运行后你会发现 output.md
格式非常清晰:
标题自动变成
# Heading
粗体、斜体、等宽代码都保留
列表和表格也能转出来
对比传统 pdfminer
抽出来的纯文本,简直就是质的飞跃。
Demo 2:分页切块(RAG 最佳实践)
RAG 系统通常希望把长文档分成“小块”,这样检索时更精确。
data = pymupdf4llm.to_markdown("sample.pdf", page_chunks=True)print(data[0].keys())
# 输出: dict_keys(['metadata', 'text'])
print(data[0]['metadata'])
print(data[0]['text'][:200]) # 打印前 200 个字符
这样每一页就变成一个独立的数据块,可以直接丢给 LlamaIndex 或 LangChain 作为知识库文档。
Demo 3:导出图片和矢量图
有些报告里的图表、流程图也很重要,可以一并导出:
md_with_images = pymupdf4llm.to_markdown("sample.pdf",write_images=True,image_folder="images_out",dpi=200
)
所有图片会保存到
images_out
文件夹在 Markdown 里会自动插入

这种引用
这样 Markdown 文件里既有文字,也能保持图片信息。
Demo 4:与 LlamaIndex 集成
直接转换成 LlamaIndex 文档对象,一步到位:
from pymupdf4llm import LlamaMarkdownReaderreader = LlamaMarkdownReader()
documents = reader.load_data("sample.pdf")print(len(documents))
print(documents[0].metadata)
print(documents[0].text[:300])
这样 documents
就能直接喂给 LlamaIndex 的向量索引。
性能对比(pymupdf4llm vs 传统方法)
我用一份 100 页的技术手册测试:
工具 | 输出内容 | 是否保留结构 | 耗时(100 页) | 可读性 |
---|---|---|---|---|
PyPDF2 | 纯文本 | ❌ | ~15 秒 | 差,排版乱 |
pdfminer.six | 纯文本 | ❌ | ~25 秒 | 一般,换行错乱 |
pymupdf4llm | Markdown + 图片 | ✅ | ~30 秒 | 非常好,接近原文排版 |
可以看到,pymupdf4llm 在速度上并不落后(基于 PyMuPDF 的高效 C++ 内核),而在输出质量上远远优于传统方案。
实战场景
学术论文问答
把整本论文集转成 Markdown 分块,直接让 LLM 回答“第 3 篇论文结论是什么?”企业内部知识库
把员工手册、技术白皮书、合同转成结构化 Markdown,再导入向量数据库。自动摘要与报告生成
利用 Markdown 的层级结构,让模型快速提取章节要点,生成高质量摘要。
总结
如果你在做 文档处理 + LLM 应用,推荐直接用 pymupdf4llm,它的优势在于:
输出 Markdown,结构保留度高
支持分页、分块,非常适合 RAG
图片、表格、列表、样式都能提取
与 LlamaIndex 等生态无缝对接
一句话总结:
👉 它是目前最实用的 PDF → LLM 数据转换工具之一。