firecrawl/pdf-inspector

Fast Rust library for PDF inspection, classification, and text extraction. Intelligently detects scanned vs text-based PDFs to enable smart routing decisions.

pdf-inspector – 快速、智能的 PDF 分类与提取

功能特色

  • 快速判断 PDF 是基于文字、扫描件、基于图像还是混合型(10-50 ms),并提供置信度分数。
  • 对于基于文字的 PDF,它能提取包含版面信息(字体、X/Y 坐标、旋转角度)的文字,并将文档转换为干净的 Markdown。
  • 检测标题、列表、代码块、表格(基于矩形与启发式)、粗体/斜体、URL、分页符等。
  • 可选的选择性 OCR:仅将缺乏可提取文字的页面发送至本地的 PP-OCRv6 模型,避免全文档 OCR 的延迟。
  • 提供原生 Rust crate、CLI (pdf2md / detect-pdf)、Python 与 Node.js 包,以及适用于浏览器的 WebAssembly 版本。

为何重要

  • 网络上约有一半的 PDF 已经是基于文字的;对所有文件执行 OCR 会浪费 CPU 和金钱。pdf-inspector 让您仅将真正需要扫描的页面路由至 OCR,降低成本与延迟。
  • 该库将 PDF 解析一次,并在检测与提取之间共享该表示,从而加速整个流程。
  • 在 200 份 PDF 的语料库基准测试中,其整体质量、阅读顺序、表格处理与速度(整组测试仅需 0.47 秒,而替代方案需数秒)均优于同类工具。

如何使用

  • Rust: cargo add pdf-inspector;调用 process_pdf("file.pdf") 以获取 pdf_type 与选用的 Markdown。
  • Python: pip install pdf-inspector;pdf_inspector.process_pdf("file.pdf")。
  • Node: npm install @firecrawl/pdf-inspector;processPdf(buffer)。
  • 浏览器: 导入 WASM 包并调用 processPdf(uint8Array)。
  • CLI: pdf2md file.pdf 获取 Markdown,detect-pdf file.pdf 仅进行分类。

关键技术细节

  • 分类时会采样部分页面,检查文字 (Tj/TJ) 与图像 (Do) 运算符。
  • 提取时会遍历 PDF 内容流,建立带有字体度量与位置的 TextItem,然后将其分组为行、列与表格。
  • 表格检测结合了绘图指令中的矩形检测与文字的启发式对齐。
  • Markdown 转换使用字体大小比例来判断标题层级,并使用字体名称模式来判断粗体/斜体。

适用场景

  • 您需要快速、本地化处理大量 PDF(报告、研究论文、发票、法律文档)。
  • 您希望在不支付云端 OCR 服务费用的情况下,获得包含表格与正确阅读顺序的结构化 Markdown。
  • 您在可以使用 Rust、Python、Node 或浏览器的环境中运行,且在需要时可以安装可选的 PDFium/ONNX Runtime 库进行 OCR。

许可: MIT。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目