怎么判断 PDF 是文本型还是扫描型?(4 种方法 + 免费检测工具)
一个最常见的场景:你想从 PDF 里复制一段话,结果发现根本选不中文字;或者提取出来的内容是一堆乱码和方块。这几乎总是因为——你拿到的是一份扫描版 PDF,它本质上是"照片",里面并没有真正的文字。
搞清类型很重要,因为两种类型的处理方式完全不同:
| 类型 | 本质 | 正确处理方式 |
|---|---|---|
| 文本型(TextBased) | 文字以真实编码存在内容流里 | 直接提取:快(毫秒级)、免费、100% 准确 |
| 扫描型(Scanned) | 整页只是一张图片 | 必须 OCR:慢、有识别错误率、可能收费 |
对文本型 PDF 跑 OCR 纯属浪费钱和时间——而约 54% 的 PDF 其实是文本型,根本不需要 OCR。
方法一:在线免费检测(最快)
打开首页在线 Demo,把 PDF 拖进去:
- 约 10–50ms 返回判定:
TextBased/Scanned/ImageBased/Mixed; - 附带 0–1 置信度分数;
- 混合型文档会精确列出第几页需要 OCR;
- 全程浏览器本地运行,文件不上传。
为什么机器判定比肉眼看靠谱
有些 PDF 页面看起来有文字,实际是"伪文本"——字体编码损坏(CID/Type0 缺 ToUnicode 映射),复制出来全是乱码。pdf-inspector 会检查字体解码链路,这类页面会被标记出来建议走 OCR,肉眼很难提前发现。
方法二:命令行一条命令
装好 CLI 后(见安装下载),detect-pdf 专干这件事:
detect-pdf report.pdf输出类型判定、置信度和需要 OCR 的页码列表。适合在批量脚本里先做路由:文本型走快速通道,其余送 OCR。
方法三:代码里判定(Node.js / Python)
Node.js
const { detectPdf } = require('@firecrawl/pdf-inspector')
const result = await detectPdf('report.pdf')
console.log(result.type) // "TextBased" / "Scanned" / ...
console.log(result.confidence) // 0–1Python
from pdf_inspector import detect_pdf
result = detect_pdf("report.pdf")
print(result.type) # 判定类型
print(result.needs_ocr) # 需要OCR的页码列表更多细节见 API 快速参考。
方法四:肉眼快速判断(不借助工具)
三个土办法,准确率约八九成:
- 试着选中文字:能拖动光标选中并复制的,大概率是文本型;一选就整页框住(像选图片)的是扫描型。
- 看页面边缘:放大到 400%,扫描件通常能看到纸张噪点、灰底、装订阴影或轻微倾斜。
- 看文件大小:同样页数,扫描件通常大得多(每页一张图片);几十 KB 的"百页文档"反而可疑——可能是空壳或纯图低质量扫描。
土办法的盲区
上面三条都判断不了「伪文本」:能选中、能复制,但复制出来是乱码——这是字体映射损坏的文本型 PDF,依然需要专门的工具检测(见方法一)。
判定之后怎么处理
拿到一份 PDF
│
▼ 判定(10–50ms)
│
├─ TextBased ──────► 直接本地提取/转 Markdown(免费、毫秒级)
│
├─ Scanned / ImageBased ──► 送 OCR
│
└─ Mixed ──► 只把需要 OCR 的页送 OCR,其余照常快速提取这就是「选择性 OCR」路由:pdf-inspector 原生版本内置该能力,每页标注内容来源(native / ocr / fused)。完整策略见错误处理与限制指南。
扫描件想转成文字怎么办?
浏览器 Demo 不含 OCR;如果你的文件确实是扫描件:
- 用支持 OCR 的桌面工具(如 Adobe Acrobat)或云服务处理;
- 或使用 pdf-inspector 原生包的选择性 OCR 功能(Rust / Node.js / Python 版),只对被质量检查拒绝的页面启用 OCR。
常见问题
PDF 能选中文字但复制出来是乱码,是什么原因?
通常是 CID/Type0 内嵌字体的 ToUnicode CMap 缺失或损坏——字形显示正常,但字符到 Unicode 的映射断了。用在线检测可以确认;pdf-inspector 能处理大部分常见 CMap,无法解码的页面会明确标记。Mixed(混合型)是什么意思?
同一份文件里部分页面是文本、部分页面是图片(比如正文是电子排版、附录是盖章扫描件)。逐页路由最省钱:文本页直接提取,只有图片页需要 OCR。置信度分数怎么理解?
0–1 的浮点数,表示判定的把握程度。低于阈值的结果建议人工复核或直接按更保守的方式处理(例如当扫描件对待)。工程实践见排错指南。相关页面
- 在线解析 Demo:判定 + 转 Markdown 一站完成;
- PDF 转 Markdown 指南:确认是文本型之后的下一步;
- CLI 教程:detect-pdf 完整参数说明。