本地PDF转Markdown,文件不用上传
作者 pdftomd.tools 团队 · 更新于 · 阅读约 6 分钟
想在本地把 PDF 转成 Markdown:打开一个在浏览器里运行的转换器,比如我们的 PDF转MD 工具,然后断开网络再转换。如果照样能转,就说明文件没有离开过你的设备。要写脚本或者批量处理,Python 库和命令行工具也能在你自己的电脑上完成同样的工作。

“本地”是什么意思,怎么验证
所谓本地转换,是指由你自己设备上的软件读取文件、转成 Markdown,而且文件的任何副本都不会发到服务器。这就排除了大多数“免费在线转换器”:它们会上传 PDF,在远端处理,再把结果传回来。也排除了那些虽然在你电脑上运行、却在难处理的部分偷偷调用云服务的工具。
你不必相信任何人的说法,包括我们。不管用哪种方式做本地PDF转Markdown,下面两个检查对任何工具都管用:
- 断网。先加载工具,再关掉 Wi-Fi(或者在浏览器开发者工具里切到离线),然后转换。需要服务器的工具会直接失败。
- 看流量。在浏览器里,放入文件前先打开“网络”面板,转换过程中留意有没有 POST 请求或其他带数据的请求。桌面软件的话,防火墙提示或网络监控工具也能告诉你同样的事。

方法一:在浏览器里本地把 PDF 转成 Markdown
手上只有一个文件、又没有 Python 环境时,浏览器工具最快。我们的转换器在标签页里用开源引擎 PDF.js 读取 PDF:根据字号识别标题,重建列表和竖线表格,还能去掉重复的页眉和页码。整个过程没有上传这一步,所以不管是合同还是菜谱,转换都一样私密。
我们在 2026年10月19日 用脚本做了断网测试:在 Chrome 155.0.8059.84 中打开页面,把浏览器切到离线,再转换一份带重复页眉、页码和一张表格的 4 页报告。测试中,离线转换用了 87 毫秒,输出 546 个字符的 Markdown。离线期间页面只发出了 1 个请求,是加载页面下方一张装饰图片的 GET,没有任何请求携带数据。页面加载时也没有任何 POST 请求。

局限和所有读取文字层的转换器一样。扫描页没有可读的文字,而我们的工具不做 OCR,所以它会提示文件看起来是扫描件,而不是瞎猜。多栏版式和复杂表格转完后要检查一下;要看哪些地方,见 格式保留指南。
方法二:在自己电脑上用 Python 库
经常要做的任务,更适合用 Python 库:可以遍历文件夹、把代码放进版本管理、在你自己掌控的服务器上运行。代码细节见我们的 Python 指南;这里只从“是否本地”的角度看四个常用的包。
- PyMuPDF4LLM 一行就能把 PDF 转成 Markdown:
pymupdf4llm.to_markdown("report.pdf"),完全离线运行。先看许可证:它和 PyMuPDF 都是 AGPL-3.0,商业许可另外出售。 - MarkItDown 来自微软(MIT),能转换很多种文件。用
pip install 'markitdown[pdf]'装上 PDF 扩展,再运行markitdown report.pdf -o report.md。默认的 PDF 处理是本地的;但有些可选扩展会把文件发给 Azure Document Intelligence 或 Content Understanding,处理机密文件时别用。 - Docling(MIT)使用版面和表格模型,并把本地运行、保护敏感数据列为功能之一。模型第一次使用时下载;文档里给了
docling-tools models download,可以提前为断网机器准备好。 - Marker(代码 Apache-2.0;模型权重另有许可,带商业限制)同样基于模型。它的可选参数
--use_llm会把内容发给 LLM 服务,默认是 Gemini;只有指向你自己部署的模型时才算本地。
python -m venv .venv && . .venv/bin/activate
pip install pymupdf4llm 'markitdown[pdf]'
# then work with the network off
python -c "import pymupdf4llm; open('report.md','w').write(pymupdf4llm.to_markdown('report.pdf'))"
markitdown report.pdf -o report-markitdown.md在 Mac 上把 PDF 转成 Markdown 也一样:两个包在 macOS 上都能用 pip 安装,Homebrew 的 poppler 包则提供下一种方法要用的 pdftotext。
方法三:命令行工具
经典的离线工具是 Poppler 里的 pdftotext。它很快,几乎到处都装着,但输出的是纯文本,不是 Markdown:没有 # 标题,也没有竖线表格。-layout 参数会用空格把各列对齐,方便人看,但解析器或模型需要结构时帮助不大。格式转换常用的 Pandoc,则根本读不了 PDF。
为了用同一个文件比较,我们在构建机(Linux x86_64, 8 vCPU)上禁用进程网络,运行了两个 Python 包和 pdftotext,然后统计输出内容。文件就是浏览器测试里的那份 4 页报告。我们转换器那一行,是同一文件在“清理 AI 残留”模式下的结果。
| 工具 | 耗时 | 标题数 | 竖线表格 | 页眉副本 | 页码行 | 被连字符断开的单词 |
|---|---|---|---|---|---|---|
| PyMuPDF4LLM 1.28.2 | 1 秒 | 4 | 是 | 4 | 4 | 否 |
| MarkItDown 0.1.8 | 0.32 秒 | 0 | 是 | 4 | 4 | 是 |
| pdftotext 25.03.0 -layout | 0.02 秒 | 0 | 否 | 4 | 4 | 是 |
| 我们的浏览器转换器(已清理) | 87 毫秒 | 4 | 是 | 0 | 0 | 否 |
哪种方法适合哪种任务

- 一个文件,马上要,不想装任何东西:用浏览器。单个文件用 PDF转MD 工具,一堆文件用 批量页面。
- 每周一个文件夹,或者自动化流程:能接受 AGPL 就用 PyMuPDF4LLM,需要 MIT 和多种文件格式就用 MarkItDown。
- 复杂版式、扫描件、公式:Docling 或 Marker,要下载模型,跑得也更慢。
- 只要文字,用来搜索或快速比对:pdftotext。
- 直接放进笔记库:在浏览器里转换,然后按 Obsidian 流程 操作。
顺便说一下用词:离线工具和私密工具不是同一个承诺。离线只代表不需要网络;私密还包括工具在硬盘上留下的东西,比如缓存、日志、崩溃报告。所以装任何软件前,都读一读它的隐私说明。
机密 PDF 检查清单
- 读一下工具的隐私政策,再用上面的离线测试自己验证。我们的隐私政策在 隐私页面。
- 联网安装软件包、下载模型,然后断网,在本地把 PDF 转成 Markdown。
- 云端扩展保持关闭:MarkItDown 的 Azure 选项、Marker 的 LLM 模式,以及任何会调用外部服务的“AI 清理”开关。
- 在你自己掌控的文件夹里转换,完成后删除中间副本。
- 把 Markdown 粘贴给聊天模型之前要想清楚:这一步就是上传。转换时没上传,不代表之后也安全。
- 法律或医疗文件,优先选能看到源代码的工具,并把所用版本和输出一起保存。
参考来源
- PDF.js — Mozilla
- PyMuPDF4LLM (README and licence) — Artifex, GitHub
- MarkItDown (README and licence) — Microsoft, GitHub
- Docling: model prefetching and offline usage — Docling project
- Marker (README and licence) — Datalab, GitHub
- Poppler (pdftotext) — freedesktop.org
常见问题
怎么在本地把 PDF 转成 Markdown?
用在标签页里处理文件的浏览器转换器,或者安装 PyMuPDF4LLM、MarkItDown 这类 Python 库,在自己电脑上运行。无论哪种,都可以断网测试一下,确认没有上传。
怎么判断在线转换器有没有上传我的文件?
打开浏览器的“网络”面板再转换,带着文件的请求会显示为 POST 或上传流量。更简单的办法是转换前先断网,会上传的工具断网后就完成不了。
你们的转换器能离线用吗?
能,前提是 PDF 有文字层。先联网加载页面,让 PDF 引擎下载好,之后就可以断网。我们测试时,一份 4 页报告离线转换完成,没有任何请求携带数据。
本地转换用哪个 Python 库最好?
在我们的小测试里,PyMuPDF4LLM 保留的结构最多,但它是 AGPL。MarkItDown 是 MIT,支持很多格式。Docling 和 Marker 适合复杂版式和扫描件,代价是要下载模型。
扫描版 PDF 能在本地转换吗?
只有在你电脑上运行 OCR 的工具才行。Docling 和 Marker 可以;我们的浏览器转换器只读文字层、不做 OCR,所以会提示文件看起来是扫描件。
用 pdftotext 代替 Markdown 够用吗?
用来搜索和快速阅读,通常够了。但它不会生成 Markdown 语法的标题和表格,依赖结构的笔记、文档和 AI 提示词,还是需要真正的 Markdown 转换器。

