Pdf-inspector:先给 PDF 做分诊,再决定要不要上 OCR

你大概率默认了一件事:把 PDF 变成干净的 Markdown,就得上 OCR 或者视觉大模型。pdf-inspector 干的第一件事,是把这个前提推翻。它先问一句:这份 PDF 里到底有没有现成文字?哪些页能直接读,哪些页才真需要 OCR?

它的做法很克制。读 PDF 的内部结构,看字体编码、文本操作符、图像覆盖度,几十毫秒就判断出它属于 TextBased、Scanned、ImageBased 还是 Mixed,顺手给出置信度和哪些页需要 OCR。判断清楚了,文本页本地提取直出 Markdown,扫描页才交给 OCR。

Pdf-inspector:先给 PDF 做分诊,再决定要不要上 OCR

为什么这件事值得专门做个库?Firecrawl 每天的文档摄入量不是小数,他们公开说实际处理的 PDF 里大约 54% 根本不需要 OCR。报告、论文、发票、合同、法律文件大多由软件生成,里面就躺着完整的文字层。过去我们图省事,收到 PDF 就丢给 OCR,又慢又贵还常常不如原生文字准。pdf-inspector 就是这道分诊台。

我一开始也把它当成又一个 PDF 转 Markdown 轮子。翻完 README 和几篇独立评测之后,判断收窄了:轮子不少,但把“要不要 OCR”做成每页级路由层的,它是头一个。这篇文章就想讲清楚,这个路由层到底值不值得你接进管线,以及它在哪些地方会悄悄让你踩坑。

核心亮点

最让我惊讶的不是提取质量,是它对 OCR 的态度。绝大多数 PDF 工具把 OCR 当默认路径,pdf-inspector 反过来,默认完全不碰 OCR。这个设计选择决定了它的速度、成本和失败模式,也决定了它和 marker、MinerU 那类“重型 OCR 优先”方案根本不是一种东西。

分类器的工作方式解释了为什么快。它不加载整篇文档,只解析 xref 表和页面树,然后采样内容流里的 Tj/TJ(文本操作符)和 Do(图像操作符)。有文本操作符就判文本页,有图像操作符就判扫描页。300 多页的 PDF 毫秒级分完类,没有光栅化、没有布局模型、没有推理。

Pdf-inspector:先给 PDF 做分诊,再决定要不要上 OCR

架构上它是一颗 Rust 内核,外面套了四层壳。核心 detector 和 extractor 共享一次文档加载,避免重复 I/O;extractor 往下拆成字体、内容流、XObject、链接、布局五大块,布局再分出表格检测和 Markdown 转换两条支路。Python 走 PyO3、Node 走 napi-rs、浏览器走 wasm-bindgen,三套绑定共用同一份解析逻辑。

真正拉开差距的是 per-page 路由,而不是简单的“整篇是不是扫描件”。它给你一份 pages_needing_ocr 列表,精确到页码。你的管线可以只把这几页送进视觉模型或 OCR,其余页本地直出。这个粒度,是它敢说自己让 Firecrawl 托管的 Fire-PDF 引擎比旧管线快 3.5 到 5 倍的原因。

Pdf-inspector:先给 PDF 做分诊,再决定要不要上 OCR

文本提取本身也不含糊。位置感知,带字体信息和 X/Y 坐标,自动排好多栏阅读顺序;Markdown 转换覆盖 H1-H4、列表、代码块、表格、粗斜体、链接和分页符。表格检测是双模的,既看 PDF 绘制指令的矩形边界,也看文本对齐的启发式,能处理金融表格、脚注和跨页续表。

我把官方基准摆出来,因为它和同类拉开了可视差距。下面这份 opendataloader-bench 200 份语料的对比里,pdf-inspector 综合 0.875 排第一,整库跑完 0.47 秒,而 PyMuPDF4LLM 要 17.1 秒。

引擎 综合得分 阅读顺序 表格 标题 200 份耗时
pdf-inspector 0.875 0.915 0.814 0.788 0.470s
liteparse 0.873 0.913 0.693 0.811 0.750s
opendataloader 0.831 0.902 0.489 0.739 2.569s
pymupdf4llm 0.735 0.886 0.401 0.424 17.117s
markitdown 0.589 0.844 0.273 0.000 16.165s

数据好看,但我得泼盆冷水:这份基准是 Firecrawl 自己跑的,OCR 全程关闭,只比本地无模型解析引擎。它证明的是“文本型 PDF 场景里 pdf-inspector 又快又准”,不是“它能替代 OCR 方案”。结论的边界要划清楚。

快速体验

装起来几乎没有门槛。Rust 生态直接 cargo add,Python 和 Node 都有官方包,浏览器里还能跑 WebAssembly 版。我先在命令行试了最轻的路径,一条命令就能把 PDF 变成 Markdown。

# 安装 CLI 工具
cargo install pdf-inspector

# 把 PDF 转成 Markdown
pdf2md document.pdf

# 只做检测,不提取
detect-pdf document.pdf --json

最小可运行示例更接近“调一个函数”。Python 这边 API 面小得离谱,process_pdf 一把梭,返回类型、Markdown 和可选的 OCR 路由信息都在结果对象里。

import pdf_inspector

result = pdf_inspector.process_pdf("document.pdf")
print(result.pdf_type)   # "text_based", "scanned", "image_based", "mixed"
print(result.markdown)   # Markdown 字符串或 None

# 选择性 OCR,纯文本页不会加载外部 OCR 运行时
ocr = pdf_inspector.process_pdf_with_ocr("document.pdf")
print(ocr.pages_routed_to_ocr)

Pdf-inspector:先给 PDF 做分诊,再决定要不要上 OCR

真正上手后我发现一个坑得提前说。默认构建完全不含 OCR,Rust 和 CLI 要 OCR 得 cargo install pdf-inspector --features ocr --bin pdf2md,还得自己装 PDFium 和 ONNX Runtime 两个外部库。浏览器 WASM 版干脆就是纯提取,永远没有 OCR。

另外两个常见卡点来自社区实测。一是 CJK 字体在某些文档上仍有 open bug,中文 PDF 遇到冷门编码要留神;二是密集双栏排版偶尔翻车,跨页表格和旋转页也还没到稳的状态。用在生产前,先拿你自己的真实文档测一轮。但工具好不好用是一回事,你手上的 PDF 到底适不适合它,是另一回事。

适用场景与局限

不是所有 PDF 都该交给它。pdf-inspector 的强项是文本型文件,弱点恰好在它的反面。下面这张表帮你快速对号入座,看清它到底压不压得住你的场景。

场景 典型用户 优势 局限
文本型报告/论文/发票 RAG、合同分析团队 本地 150ms 直出,零 GPU 成本 扫描页无能为力
大规模文档摄取管线 搜索、知识库服务 路由层省下绝大多数 OCR 账单 需自建 OCR 兜底
浏览器内解析 前端文档预览 WASM 零服务端往返 不支持 OCR
纯扫描件/图片 PDF 档案数字化 会精准标记需 OCR 的页 自己不提取内容

如果你的 PDF 绝大多数是软件生成的文本型文件,它是最优解。54% 的省 OCR 比例放到真实业务里,省下的 GPU 账单相当可观。

光说不适合不够,不适用的情况我得逐条讲明白,而且每一条都给你配了明确的替代方案:

  • 你是做扫描件批量数字化的:它只负责“告诉哪页要 OCR”,提取还得接 marker 或 MinerU 这类带 OCR 的方案。
  • 你的文档以中文老旧编码、密集双栏为主:先拿样本测,别直接进生产,CJK 和双栏目前确有 open bug。
  • 你要的是连图表都抠出来的端到端方案:开源版目前不提取图形,得另找 marker 或 MinerU。

聊完它能干嘛、不能干嘛,背后那支团队的成色才是决定它能不能长期跟的关键。

社区健康度

先看硬指标。这个项目 2026 年 2 月才开库,半年左右冲到约 15k Stars,Fork 约 1k,8 月初还以单日 +2,500 的速度登顶过 GitHub Trending。

指标 数据 说明
Stars 约 15k 2026 年 8 月多源汇总 14.9k–15.8k,增速异常
核心维护者 Firecrawl 团队 公司背书,Bus Factor 看公司优先级
协议 MIT 商业友好,可闭源集成
版本 1.17.0(2026-08-21) 迭代极快,版本号跳跃明显

维护质量有亮点也有隐忧。亮点是有公司团队持续投入,CI 频繁,CMap 处理、NAPI/Python API 统一都在推进;隐忧是 commit 历史里大量由 Claude、Cursor Agent 代笔,人类 review 密度值得长期观察。

社区声音里最尖锐的一条来自评测区:“ms per page 是误导性的营销话术。决定用户留不留下的,是到底有多少乱七八糟的真实文档,扫描件、旋转页、2004 年打印机驱动导出的 PDF,能被正确解析出结构。”这句话戳中了基准没覆盖的盲区。

独立评测 andrew.ooo 也给了诚实的差评维度:开源版不做 OCR、不提取图形、基准是厂商自跑,而且 CJK 字体和密集双栏确有 open bug。这些不是黑料,是接进生产前必须评估的真实边界。但维护数据再漂亮,也架不住一个问题:它到底值不值得你长期跟?

洞察与判断

我的核心判断:把它当“路由层”用,它是 2026 年最值得接的 PDF 组件之一;把它当“OCR 替代品”用,你会失望。这两个定位一字之差,决定项目成败。

表面看它和 PyMuPDF4LLM、pdfplumber 是同类,都是提取文字。真正关键的差别在路由粒度。PyMuPDF4LLM 提取强但默认全量跑,pdf-inspector 多了一道每页级分诊,把 54% 不需要 OCR 的文档拦在 GPU 门外。对按量计费的管线,这笔账省的是真金白银。

趋势上我判断它在上升通道。不是因为 Stars 好看,是因为它背后是 Firecrawl 一套 deliberate 的文档解析战略:pdf-inspector 管 PDF,AnyDoc 管另外 14 种格式(docx、xlsx、pptx、epub 等),两者都已经在 /parse 和 /scrape 端点跑着。一个公司把核心基建开源,通常不会轻易砍。

但你得接受它的“半成品感”。版本号从 7 月底基准的 0.2.6 跳到 8 月的 1.17.0,这种跳跃要么是营销式版本对齐,要么意味着 API 还在剧烈变动。中文用户尤其要记住 CJK 和双栏那两个 open bug,别被英文基准的漂亮数字带偏。

还有个容易忽略的信号:commit 历史里大量提交由 Claude、Cursor Agent 代笔。这说明 Firecrawl 在用量产化的 AI 辅助开发,迭代速度快得吓人,但也意味着人类 review 的密度需要你长期盯。开源项目里,谁在合代码比谁在写代码更重要。

放到 PDF 解析这个赛道看,它填补的是“路由层”这块长期空白。marker、MinerU 在 OCR 端卷精度,PyMuPDF4LLM 在提取端卷速度,没人专门把“先判断要不要 OCR”做成独立、可嵌入的组件。这个空位被 Firecrawl 占了,而且占得很早。

顺带说一句,54% 这个“不需要 OCR”的比例也是 Firecrawl 自己公布的,不是独立审计。但它和基准里 pdf-inspector 在文本型语料上的压倒性表现能对上,所以我愿意先信一半,等社区拿更多真实文档验证。

说它好用和说它不够好用的,其实都没说到点子上。它把对的事做了,把难的事(扫描件、图表、怪异编码)留给了你和 OCR。这个取舍很务实,也很诚实。

如果哪天你要处理的不只是 PDF,记住 AnyDoc 这层。它把 pdf-inspector 当内核,一份调用覆盖 14 种格式,PDF 只是其中之一。

我会给它一个明确建议:文本型 PDF 为主的管线,现在就可以接;混合或扫描为主的,等 OCR 集成和 CJK 修复再动。

资源地址

资源 地址
GitHub https://github.com/firecrawl/pdf-inspector
官方文档 https://firecrawl.github.io/pdf-inspector/
Python 文档 https://github.com/firecrawl/pdf-inspector/blob/main/docs/python.md
Node.js 文档 https://github.com/firecrawl/pdf-inspector/blob/main/napi/README.md
基准语料 https://github.com/opendataloader-project/opendataloader-bench
姊妹项目 AnyDoc https://github.com/firecrawl/anydoc

上面的链接就摆在这了,最后落到你手上其实只有一件事要想清楚:接下来你怎么把它接进自己的管线。

先接路由层,别当 OCR 用

如果你已经在做 RAG 或文档摄取,且 PDF 以文本型为主,先把 pdf-inspector 当分诊台接在 OCR 前面。从一条 pdf2md document.pdf 命令开始,拿你自己的真实文档测一轮再决定。

如果你还在观望,盯两个指标:CJK 字体 bug 的修复进度,以及 OCR 集成的稳定性。这两点决定它是停留在好用的个人工具,还是能变成靠谱的生产依赖。

PDF 解析最贵的从来不是解析,是替那些本来就带文字的文档白付的 OCR 账单。先分诊,再花钱,这个顺序很多团队到现在还没理顺。

开源项目

witr:把"为什么这个进程在跑"从玄学变成一条命令

2026-8-24 12:40:55

实战分享

淘天营销中后台生码工作流最佳实践

2026-4-27 16:16:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧