
5 分钟上手 pdf-inspectorPDF 类型判断与 Markdown 提取完整指南【免费下载链接】pdf-inspectorFast Rust library for PDF inspection, classification, and text extraction. Intelligently detects scanned vs text-based PDFs to enable smart routing decisions.项目地址: https://gitcode.com/GitHub_Trending/pdf/pdf-inspectorpdf-inspector 是一个纯 Rust 编写的开源 PDF 检查库它在十几毫秒内判断一份 PDF 是文本型、扫描型还是混合型再把文本型 PDF 在本地转成带标题、列表和表格的 Markdown全程不调用 OCR 服务。本文带你在 5 分钟内完成安装跑通提取 Markdown、快速判断类型、选择性 OCR 路由三个核心场景。 它解决什么问题先判断再决定要不要 OCR很多 PDF 管线的成本都花在 OCR 上但实际上不少 PDF 本身就带文本层根本不需要 OCR。pdf-inspector 的设计思路就是先分类再路由智能分类约 10–50ms 判断文档属于 text_based、scanned、image_based 还是 mixed返回 0–1 的置信度并列出具体哪些页缺少文本层。位置感知提取每段文本携带 X/Y 坐标、字体大小与加粗/斜体等属性自动处理多栏版式和 RTL从右到左文本的阅读顺序。Markdown 转换按字号分级识别 H1–H4 标题还原列表、代码块、加粗/斜体、表格并把 URL 转成 Markdown 链接。选择性 OCR只有被原生提取拒绝的页面才路由到本地 OCRPP-OCRv6 Small干净的文本型 PDF 不会加载任何 OCR 运行时。一次解析共享文档只解析一次检测结果和提取结果共用同一次 I/O不重复读文件。官方给出的典型路由是这样的PDF 进来后先分类约 20ms如果判定为文本型且置信度高就在本地约 150ms 内完成提取否则才送去 OCR 服务2–10s。项目资料显示约 54% 的 PDF 属于不需要 OCR的那一类——这部分成本被直接省掉。 三步完成安装Python、Node.js 与浏览器Pythonpip 一行命令pip install pdf-inspector预编译 wheel 覆盖 CPython ≥3.8 的 Linuxx86_64、aarch64、macOSIntel、Apple Silicon和 Windowsx64无需 Rust 工具链。如果你是在仓库源码目录里做本地开发pip install maturin maturin develop --releaseNode.js预编译二进制免编译npm install firecrawl/pdf-inspectornpm 会自动按平台安装对应的预编译二进制Linux x64/ARM64、macOS ARM64、Windows x64装完即可用。浏览器WebAssembly 版本npm install firecrawl/pdf-inspector-wasm同一个 Rust 核心编译成 WebAssemblyPDF 字节在浏览器本地解析、不会上传到任何服务器适合 Web Worker 场景。Rust 与命令行工具cargo add pdf-inspector # 作为库依赖 cargo install pdf-inspector # 安装 pdf2md / detect-pdf 两个 CLI⚡ 首次实战一行代码把 PDF 提取成 MarkdownPython 端最常用的是process_pdf它一次完成检测 提取 转 Markdownimport pdf_inspector result pdf_inspector.process_pdf(document.pdf) print(result.pdf_type) # text_based / scanned / image_based / mixed print(result.confidence) # 0.0 - 1.0 的置信度 print(result.markdown) # 可直接使用的 Markdown 字符串返回结果里还有几个值得关注的字段pages_needing_ocr缺少文本层、需要 OCR 的页码列表1 起始。pages_with_tables / pages_with_columns检测到表格和多栏版式的页面可用来判断文档复杂度。has_encoding_issues字体编码损坏时为 True提示你回退到 OCR。processing_time_ms本次处理耗时毫秒。Node.js 端的对应写法同样直接import { readFileSync } from fs; import { processPdf } from firecrawl/pdf-inspector; const result processPdf(readFileSync(document.pdf)); console.log(result.pdfType, result.markdown);不想写代码的话CLI 一条命令就能出结果pdf2md document.pdf加--json可把结果变成 JSON 方便管道处理。浏览器端只需await init()后调用processPdf(uint8Array)细节见 wasm/README.md。 快速判断 PDF 类型10–50ms 决定路由如果你的管线只需要该不该走 OCR这个答案用detect_pdf就够了它只做检测不做提取detection pdf_inspector.detect_pdf(document.pdf) print(detection.pdf_type) # 类型 print(detection.confidence) # 置信度 print(detection.pages_needing_ocr) # 缺文本层的页分类原理是采样内容流检查其中是否存在Tj/TJ文本操作符和Do图像操作符因此即便 300 多页的大文档也能在毫秒级出结果。采样策略可按需选择EarlyExit默认逐页扫描遇到第一个非文本页就提前退出适合文本型 PDF 直接走快速提取的管线。Full完整扫描不提前退出用来精确区分 Mixed 和 Scanned。Sample(n)均匀抽取 n 页首、中、尾适合速度优先的超大文档。Pages只检查指定的 1 起始页码。确认是扫描型之后可以一步调用选择性 OCRocr pdf_inspector.process_pdf_with_ocr(document.pdf) print(ocr.pages_routed_to_ocr) # 实际走了 OCR 的页默认auto模式只对被原生提取拒绝的页面跑本地 PP-OCRv6 Small并给每一页附带来源native/ocr/fused、模型标识和置信度等溯源信息只有在真正路由到 OCR 时才会用到 PDFium 和 ONNX Runtime 外部库。离线部署、模型缓存等配置见 docs/ocr-runtime.md。 进阶用法指定页面、位置信息与基准测试常规之外的能力每个都是一行调用完整签名见 docs/python.md指定页面process_pdf(document.pdf, pages[0, 2])只处理选中页。字节输入process_pdf_bytes(data)直接处理内存中的 PDF不落盘。位置信息extract_text_with_positions返回每段文本的坐标、字号、字体与样式。按页 Markdownextract_pages_markdown逐页输出 Markdown 及表格/多栏等布局元数据。区域提取extract_text_in_regions只提取边界框内的文本并给出needs_ocr质量标记。标签 PDFextract_structure_elements读取带标签 PDF 的标题/段落等结构元素。CLI 端同样够用pdf2md支持--json、--raw纯 Markdown 无头信息、--compact压缩点线等填充、--pages插入分页标记、--select-pages 1,3,5-10选页detect-pdf --analyze --json则额外输出表格与栏数分析。性能方面项目基准在 opendataloader-bench 语料200 份 PDF本地引擎、OCR 关闭上刷新于 2026-07-31Apple M4 Pro引擎综合得分阅读顺序表格 (TEDS)200 份总耗时pdf-inspector0.8750.9150.8140.470sliteparse0.8730.9130.6930.750sopendataloader0.8310.9020.4892.569spymupdf4llm0.7350.8860.40117.117smarkitdown0.5890.8440.27316.165s想在自己的语料上复现对比仓库提供了配对基准工具方法说明见 docs/benchmarking.md。 延伸阅读官方文档与示例docs/python.mdPython 完整 API 与结果类型说明。napi/README.mdNode.js / Bun 绑定含区域提取与异步版本。wasm/README.md浏览器 WebAssembly 使用细节。docs/rust-api.mdRust 库 API 与 OCR 低层控制。docs/ocr-runtime.mdOCR 外部依赖安装、平台支持与离线模式。docs/debugging.md用RUST_LOG打开调试日志。examples/basic_usage.py可运行的 Python 示例脚本覆盖本文全部入口函数。从本文的安装命令开始先拿一份真实 PDF 跑一遍process_pdf看看输出质量如果你的管线里混有扫描文档再试一下detect_pdf的快速路由。更细的参数、OCR 运行时配置和基准复现方法直接查阅上面链接的文档即可。【免费下载链接】pdf-inspectorFast Rust library for PDF inspection, classification, and text extraction. Intelligently detects scanned vs text-based PDFs to enable smart routing decisions.项目地址: https://gitcode.com/GitHub_Trending/pdf/pdf-inspector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考