Rust 中使用 pdf-inspector - cargo PDF 解析
API 参考Rust
pdf-inspector 的 Rust crate 就叫 pdf-inspector,它是整个库的原生形态——其他语言绑定(Node/Python/WASM)都是它的编译产物。Rust 里用,性能是天花板。默认构建纯 Rust、无 ML 模型,唯一的 PDF 解析依赖是 lopdf。
安装
cargo add pdf-inspector想用未发布的最新改动:
[dependencies]
pdf-inspector = { git = "https://github.com/firecrawl/pdf-inspector" }核心 API
use pdf_inspector::{process_pdf, detect_pdf, PdfType};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 1. 一步到位:检测 + 提取 + Markdown
let result = process_pdf("document.pdf")?;
println!("Type: {:?}", result.pdf_type); // TextBased / Scanned / ImageBased / Mixed
println!("Confidence: {:.0}%", result.confidence * 100.0);
if let Some(markdown) = &result.markdown {
println!("{markdown}");
}
// 2. 只判定类型(不提取)
let info = detect_pdf("document.pdf")?;
match info.pdf_type {
PdfType::TextBased => { /* 本地直接提取 */ }
_ => { /* info.pages_needing_ocr 告诉你哪些页要 OCR */ }
}
Ok(())
}字节入口:process_pdf_mem(&bytes),文件已在内存里时免落盘。
用 PdfOptions 精细控制
use pdf_inspector::{process_pdf_with_options, PdfOptions, ProcessMode, DetectionConfig, ScanStrategy};
// 只分析版面,不生成 Markdown
let result = process_pdf_with_options(
"document.pdf",
PdfOptions::new().mode(ProcessMode::Analyze),
)?;
// 自定义扫描检测策略(抽样 5 页)
let result = process_pdf_with_options(
"large.pdf",
PdfOptions::new().detection(DetectionConfig {
strategy: ScanStrategy::Sample(5),
..Default::default()
}),
)?;
// 只处理指定页
let result = process_pdf_with_options(
"document.pdf",
PdfOptions::new().pages([1, 3, 5]),
)?;ProcessMode 三档:DetectOnly(只判定)、Analyze(分析版面不渲染)、Full(完整提取)。
CLI 工具
crate 自带两个二进制,cargo install pdf-inspector 即可拿到:
# pdf2md:PDF → Markdown
pdf2md document.pdf # 输出到 stdout
pdf2md document.pdf --json # 结构化 JSON
pdf2md document.pdf --pages 1-3 # 指定页
pdf2md document.pdf --compact # 省 token 的紧凑输出
# detect-pdf:类型判定
detect-pdf document.pdf --analyze --json可选:OCR 能力
原生构建可通过 feature 开关接入选择性 OCR,而不引入任何推理运行时:
[dependencies]
pdf-inspector = { version = "1", features = ["vision", "model-cache"] }visionfeature 提供PageRenderer/OcrEnginetrait 与OcrOptions(Off/Auto/Force路由模式)- OCR 默认关闭——干净的处理请求永远不会触碰模型或网络
model-cache+model-download负责固定版本 PP-OCRv6 Small 模型的校验和验证与原子安装;离线场景可显式指定模型目录并设为ModelDownloadPolicy::Offline
详细契约见官方 docs/rust-api.md 与 OCR 运行时指南。
小提示
- 只要类型就别调
process_pdf——detect_pdf快一个数量级 - 大文件调低抽样页数(
ScanStrategy::Sample(n))能明显加速分类阶段 - 版本以官方 docs/rust-api.md 为准