本地脚本
Python PDF转Markdown
更新于 · pdftomd.tools 团队
Python PDF转Markdown 只需要在自己电脑上跑一个脚本。本指南给出两个开源库的实测代码片段,还有一个浏览器工具,留给不想装任何东西的时候。

手边没有 Python?下面的浏览器工具免安装就能完成同样的转换。放入带文字层的文件,复制结果即可。
源 PDF
把 PDF 拖到这里,或点击选择
仅支持带文字层的 PDF。扫描件需要 OCR,本工具不做 OCR。
Markdown 预览
Markdown 会显示在这里。
四步搭好环境
一条本地流水线,从安装到输出文件。
该用哪个 Python 库?
做 Python PDF转Markdown,并没有唯一最好的库;每个库在速度、许可证和表格处理上各有取舍。pymupdf4llm 基于 PyMuPDF,读取版式后直接写出 Markdown,包括标题和带线表格,适合作为笔记和检索场景的默认选择。pdfplumber 能更细致地访问字符、线条和单元格,适合以表格数据为主的脚本。
两者都是第三方开源项目,不是本站的产品。只有几份文档时,本页的浏览器工具免安装就能做类似的处理;要按计划处理成百上千个文件,本地 Python 脚本更合适。
- pymupdf4llm:一次调用输出 Markdown
- pdfplumber:精确访问带线表格的单元格
- 浏览器工具:免安装、不上传
所有方案共有的限制
这些方案都不能单独读取扫描件:浏览器工具没有 OCR,上面的库处理纯图片页面也需要另加 OCR 步骤。合并单元格、旋转表格和双栏版式对任何 Python 库和我们的工具来说都不容易,请手动检查表格。在浏览器工具中,无边框表格至少需要三行,第一行总会成为表头。

Python 代码片段
已用 pymupdf4llm 1.28 和 pdfplumber 0.11 测试。复制一段在本地运行。
用 pymupdf4llm 转一个文件
第三方 · AGPL速度快、能识别版式:输出保留标题和带线表格。PyMuPDF 采用 AGPL,放进闭源产品前请先看清条款。
# pip install pymupdf4llm
import pathlib
import pymupdf4llm
md = pymupdf4llm.to_markdown("report.pdf")
pathlib.Path("report.md").write_text(md, encoding="utf-8")
用 pdfplumber 提取表格
第三方 · MIT最适合带线表格。默认只找画了线的表格;无边框网格需要单独设置。辅助函数会把每个表格写成竖线表格。
# pip install pdfplumber
import pdfplumber
def table_to_md(rows):
rows = [[(c or "").replace("|", "\\|").strip() for c in r] for r in rows]
head, body = rows[0], rows[1:]
lines = ["| " + " | ".join(head) + " |", "|" + " --- |" * len(head)]
lines += ["| " + " | ".join(r) + " |" for r in body]
return "\n".join(lines)
with pdfplumber.open("invoice.pdf") as pdf:
for page in pdf.pages:
for table in page.extract_tables():
print(table_to_md(table), end="\n\n")
用 pymupdf4llm 转整个文件夹
第三方 · AGPL一个循环:读取 pdfs 文件夹里的每个文件,每个输入写出一个 .md 文件。
# pip install pymupdf4llm
import pathlib
import pymupdf4llm
out = pathlib.Path("markdown")
out.mkdir(exist_ok=True)
for pdf in sorted(pathlib.Path("pdfs").glob("*.pdf")):
md = pymupdf4llm.to_markdown(str(pdf))
(out / f"{pdf.stem}.md").write_text(md, encoding="utf-8")
print("wrote", out / f"{pdf.stem}.md")
适合用 Python 脚本的地方
三种值得写脚本的任务。

脚本也好,浏览器也好,文件都留在本地
本地脚本不会把文件发到任何地方,我们的浏览器工具也一样:转换由 pdf.js 在页面里完成,文件从不到达我们的服务器。
相关工具
更多关于 PDF 和 Markdown 的页面。
参考来源
- pymupdf4llm to_markdown() reference — PDF4LLM docs
- PyMuPDF (AGPL-3.0) — GitHub
- pdfplumber (MIT) — GitHub
- pdf.js — Mozilla
常见问题
关于 Python 方案、许可证和限制。
Python PDF转Markdown 最简单的方法是什么?
pymupdf4llm:用 pip 安装,对文件调用 to_markdown,就能得到带标题、列表和带线表格的 Markdown。
需要账号或密钥吗?
不需要。库用 pip 安装后可离线运行,浏览器工具也不需要账号。写脚本请用本地 Python 库。
Python 脚本能读扫描件吗?
单靠它不行。纯图片页面需要先做 OCR。我们的浏览器工具也没有 OCR,文件像扫描件时会提醒你。
转换时怎样保留表格?
pymupdf4llm 会把带线表格写成竖线表格;pdfplumber 负责找到表格,再由辅助函数转换。无边框表格两者都需要微调。
浏览器工具和这些库是一样的吗?
不一样。它使用 pdf.js 和自己的版式规则,输出可能不同。它免安装,适合少量文件。
Python 脚本会上传我的文件吗?
不会。本地脚本在你的电脑上运行,本页的浏览器工具也不上传文件。






