pdf-inspector:Firecrawl 出品的高性能 Rust PDF 检测与提取库,200ms 搞定 PDF 转 Markdown

引言

处理 PDF 文件是很多开发者的痛点——OCR 慢、解析乱、表格提取不准确。Firecrawl 团队最近开源了一款轻量级 Rust 库 pdf-inspector,能在 200ms 内完成 PDF 类型检测、文本提取和 Markdown 转换,在今天 GitHub Trending 斩获 2500+ stars。今天就来深入了解这个黑马工具。

pdf-inspector

核心功能

🔍 智能 PDF 分类

pdf-inspector 首先做的是判断 PDF 类型:

  • TextBased(基于文本):直接有文本层的 PDF
  • Scanned(扫描件):纯图片,需要 OCR
  • ImageBased(图片为主):多为图片的 PDF
  • Mixed(混合):文本与图片混合

检测速度极快——只需 10-50ms,通过采样 PDF 内容流判断。还会返回置信度评分(0.0-1.0)和每页是否需要 OCR 的具体列表,方便做智能路由。

📝 精准文本提取

位置感知的文本提取,包含:

  • 字体信息(名称、大小)
  • X/Y 坐标定位
  • 自动多栏布局识别和阅读顺序
  • RTL(从右到左)文字支持
  • CID 字体解码(ToUnicode CMap)
  • 编码问题自动标记(方便降级到 OCR)

🎯 Markdown 智能转换

转换质量非常高,支持:

  • 标题 H1-H4:相对于正文字体大小层级,含 0.5pt 聚类
  • 粗体/斜体:字体名称模式匹配(Bold、Italic、Oblique)
  • 无序列表:• – * ○ ● ◦ 前缀识别
  • 有序列表:1. 1) (1) 模式检测
  • 代码块:等宽字体(Courier、Consolas、Monaco 等)+ 关键字检测
  • 表格:矩形检测 + 启发式对齐双模式
  • 超链接:自动转 Markdown 链接
  • 上标/下标:字号和 Y 偏移检测
  • 连字符合并:自动连接跨行断词
  • 首字下沉:大写首字母与后续文字合并

📊 表格提取(亮点!)

pdf-inspector 的表格提取是双模式的:

  1. 矩形检测:从 PDF 绘图操作中识别表格线框(Union-Find 算法)
  2. 启发式检测:从文本对齐推断表格结构

还能处理财务报表(合并数字 token)、脚注跨页续表

性能基准

在 OpenDataLoader-Bench 基准测试(200 个 PDF)中,pdf-inspector 表现惊人:

以下为各引擎对比(仅限本地、无 ML 模型、无 OCR):

  • pdf-inspector:总分 0.875,读取顺序 0.915,表格 0.814,标题 0.788,速度 0.47s
  • liteparse:总分 0.873,表格 0.693,速度 0.75s
  • opendataloader:总分 0.831,表格 0.489,速度 2.57s
  • pymupdf4llm:总分 0.735,表格 0.401,速度 17.12s
  • markitdown:总分 0.589,表格 0.273,速度 16.17s

(2026年7月31日测试,Apple M4 Pro。分数 0-1,越高越好。)

全项第一——无论是准确率还是速度。尤其表格提取(0.814 vs 第二名 0.693)优势明显。

多语言绑定

pdf-inspector 提供了完善的生态绑定:

Python

pip install maturin
maturin develop --release

import pdf_inspector

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

Node.js / Bun

npm install @firecrawl/pdf-inspector

import { processPdf, classifyPdf } from '@firecrawl/pdf-inspector';
import { readFileSync } from 'fs';

const result = processPdf(readFileSync('document.pdf'));
console.log(result.pdfType);   // TextBased, Scanned...
console.log(result.markdown);  // Markdown string

浏览器 WebAssembly

npm install @firecrawl/pdf-inspector-wasm

import init, { processPdf } from '@firecrawl/pdf-inspector-wasm';
await init();
const response = await fetch('/document.pdf');
const pdf = new Uint8Array(await response.arrayBuffer());
const result = processPdf(pdf);

Rust(原生)

cargo add pdf-inspector

use pdf_inspector::process_pdf;
let result = process_pdf("document.pdf")?;
println!("Type: {:?}", result.pdf_type);

CLI 工具

cargo install pdf-inspector

# PDF 转 Markdown
pdf2md document.pdf
pdf2md document.pdf --json          # JSON 格式
pdf2md document.pdf --pages         # 包含分页标记
pdf2md document.pdf --select-pages 1,3,5-10  # 指定页面
pdf2md document.pdf --compact       # Token 高效输出

# 仅检测类型
detect-pdf document.pdf
detect-pdf document.pdf --analyze --json  # 含表格/栏分析

架构设计

pdf-inspector 的管道设计非常清晰:

PDF bytes
  │
  ├─► detector → PdfType (TextBased / Scanned / ImageBased / Mixed)
  │
  └─► extractor
        ├─ fonts → 字体宽度、编码
        ├─ content_stream → TextItem + PdfRect
        ├─ links → 超链接、AcroForm
        └─ layout → 栏检测 → 行分组 → 阅读顺序
             │
             ├─► tables
             │   ├─ rects (矩形检测,Union-Find)
             │   ├─ heuristic (文本对齐检测)
             │   ├─ grid → 行列分配 → 单元格
             │   └─ format → Markdown 表格
             │
             └─► markdown
                  ├─ analysis (字体统计、标题层级)
                  ├─ convert (逐行 + 表格/图片插入)
                  └─ postprocess (清理)

唯一的外部依赖是 lopdf(PDF 解析),零 ML 模型、零外部服务,纯 Rust 实现。文档只加载一次,在检测和提取阶段共享,避免冗余 I/O。

典型工作流:大规模 PDF 智能路由

pdf-inspector 最典型的应用场景是作为 PDF 处理管道的第一级

PDF 到达
  ↓
 pdf-inspector 分类 (~20ms)
  ↓
 TextBased + 高置信度?
  YES → 本地提取 (~150ms),完成 ✅
  NO  → 发送到 OCR 服务 (2-10s)

这意味着 约 54% 的 PDF 可以跳过昂贵的 OCR,大幅节省成本和延迟。

适用场景

  • AI / RAG 应用:将 PDF 文档转为结构化 Markdown 喂给 LLM
  • 文档管理系统:批量处理报告、论文、合同
  • 财务自动化:发票、财务报表的智能表格提取
  • 法律科技:法律文书的结构化转换
  • 搜索引擎:PDF 内容索引前的预处理
  • 边缘计算 / 浏览器:WASM 版本可在客户端本地运行,无需服务器

总结

pdf-inspector 以极简的依赖(仅 lopdf)、极快的速度(200ms 级)和领先的准确率,为 PDF 处理提供了一个优雅的解决方案。它不试图「大而全」——专注做好文本 PDF 的检测、提取和 Markdown 转换,把需要 OCR 的留给专业工具。

如果你正在构建需要处理大量 PDF 的应用(RAG、文档分析、数据提取),pdf-inspector 值得加入你的技术栈。


GitHubgithub.com/firecrawl/pdf-inspector

许可:MIT

语言:Rust(提供 Python / Node.js / WASM 绑定)

Stars:10k+

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享