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

核心功能
🔍 智能 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 的表格提取是双模式的:
- 矩形检测:从 PDF 绘图操作中识别表格线框(Union-Find 算法)
- 启发式检测:从文本对齐推断表格结构
还能处理财务报表(合并数字 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 值得加入你的技术栈。
GitHub:github.com/firecrawl/pdf-inspector
许可:MIT
语言:Rust(提供 Python / Node.js / WASM 绑定)
Stars:10k+















cqlbgzs@163.com 1年前0
d好879445037@qq.com 2年前0
购买了 无法下载Alexcc 3年前0
强大Alexcc 3年前0
看不了教程Alexcc 3年前0
雷刺下载Alexcc 3年前0
下载Alexcc 3年前0
下载dsa456159 3年前0
下载