PDF 转 Markdown
将 PDF 转换为干净的 Markdown,带有真正的 '#' 标题、项目符号和编号列表,以及 GitHub 风格的表格——根据页面实际的字号和列位置重建,而非从纯文本转储中猜测得出。专为那些在粘贴到 ChatGPT、Claude、Gemini、DeepSeek 或 Grok 之前先将 PDF 转为 Markdown 以节省令牌的人打造。
结构究竟是如何被识别出来的
PDF 本身没有标题、没有列表,也没有表格,它只有在特定坐标上的字形。因此,这个转换器不会简单地倾倒文本,而是读取每一段文字及其位置、字号和字体名称,并据此重建结构:
- 通过字号聚类识别标题。 覆盖全文最多字符的字号就是正文字号。明显更大的字号会按从大到小的顺序变成
#、##、###。正文字号下的短小、加粗、独立成行的文字也会被识别为子标题。 - 通过行首符号识别列表。 以 •、-、* 或“1.”/“2)”开头的一行会变成真正的 Markdown 列表项,换行后的续行会被重新归并回它所属的列表项。
- 通过 x 坐标聚类识别表格。 多行文字都从同一个 x 坐标开始,这个坐标就是一个真实的列。一个区块需要至少三行连续且在至少两列上一致,才会被输出为表格——如果得到的网格大部分是空的,就会被标记为不确定,并保留为纯文本,而不是生成一个看起来有问题的表格。
- 去除噪声。 在大多数页面的顶部或底部重复出现的行是页眉页脚,会被删除(页码按形状匹配,因此“第 3 页,共 12 页”和“第 4 页,共 12 页”会被视为同一行)。因换行连字符断开的单词会被重新拼接。
分页边界会被保留为 HTML 注释 <comment/>,而不是可见的标题,因为“## 第 2 页”这样的内容会被 Markdown 解析器——以及语言模型——误读为真实存在的文档结构。
常见问题
为什么在使用 ChatGPT 或 Claude 之前要将 PDF 转换为 Markdown?
因为 Markdown 以更少的噪音和更多的结构表达同样的内容。原始 PDF 文本转储会在每页重复页眉页脚,在换行处用连字符将单词拆断,并向模型呈现每个视觉行的一小段文字,却没有说明它是标题、列表还是表格。Markdown 标题和表格能确切告诉模型文档是如何组织的,从而改善您得到的回答——而去除页面装饰性部分意味着您不必为无意义的文本支付令牌费用。
转换为 Markdown 真的能为 AI 减少令牌数吗?
这取决于文档,该工具会向您展示真实数字,而非营销宣传。明显的优势来自去除重复的页眉页脚、重新排列被强制换行的文本,以及重新连接被连字符拆断的单词(一个被拆成 "through-" 和 "put" 的单词会被标记为多个而非一个令牌)。相反,表格的竖线符号和标题标记会加回一些字符。在每页都有装饰性元素的长报告上,节省是实实在在的;而在简短、干净、表格密集的 PDF 上,Markdown 的大小可能相差无几——但对模型来说仍然更有用得多。该工具会显示一个明确标注为估算值的预估(约每四个字符一个令牌)。
它会识别我 PDF 中的标题和表格吗?
只要文档使用更大或加粗的字体,标题就会被识别,这涵盖了几乎所有从 Word、Google Docs、LaTeX 或 InDesign 导出的报告、论文、手册和合同。当列在页面上以一致的方式对齐成行时,表格就会被识别——这是常见情况。只有靠绘制边框区分、没有一致文本对齐方式的表格,以及重度设计的杂志式版式,才是困难案例;当网格看起来不可靠时,该工具会明确说明,并保留文本而不是构建表格。
我可以关闭部分识别功能吗?
可以。标题识别、列表识别、表格识别、连字符重新连接、粗体/斜体,以及去除重复页眉,都是独立的开关,还可以选择添加 '<!-- page N -->' 标记。PDF 只需读取一次,因此每个开关都会立即重新转换,令牌估算也会随之更新。
扫描版 PDF 会怎样?
扫描版 PDF 是没有文本层的页面图片,而这里没有 OCR 步骤,因此无法从中提取任何内容。该工具会明确告诉您哪些页面没有文本层,而不是默默返回一个空文件。请先用某个 OCR 工具处理 PDF,然后再转换结果。
我的 PDF 会上传到服务器吗?
不会。PDF 使用 pdf.js 完全在您的浏览器内部解析,Markdown 也在那里生成。文件永远不会离开您的设备,这也意味着机密合同和内部报告在这里转换是安全的。
我可以在 RAG 流程中使用 Markdown 吗?
这是使用它的主要原因之一。Markdown 标题为分块器提供了自然的分割点——先在 ## 边界处分割,再按段落分割——因此分块能与实际章节对应,而不是在句子中间截断,分块后表格对模型来说仍然可读。下载 .md,或直接从工具中复制。