Expand description
docparser PDF 后端:pdfium-worker(PDFium 常驻 worker 线程 + 通道请求/响应)。
架构(发布形态 06 + PDF_TODO“native 调用进 worker 线程“):
- 一条 worker 线程独占持有
Pdfium(含裸指针,非 Sync),进程内只此一处 native 状态;能力对象经mpsc通道发路径、收RawDoc——避开了在 trait 对象里持有 Pdfium 的 Send/Sync 困境,也与 Python 参考实现的 PDF-0.1 语义对齐。 - 逐行抽取 text + bbox(pt,左上原点):走 text page 的 rect 分段
(
FPDFText_CountRects/FPDFText_GetBoundedText),与 Python 参考实现同粒度, 且包含 Form XObject 内文本(代码清单/图表标注/水印——页对象列表看不到这些); 支持 CJK CID 字体(PDFium 内建 CMap,不依赖 ToUnicode),解决 pdf-extract v1 的中文盲区。 - 运行时 PDFium 库发现:
DOCPARSER_PDFIUM_LIB→<exe>/../lib→ home 下 conda 布局 → 扫描常见 Python site-packages(Windows 上HOME往往为空,需USERPROFILE)。 - 错误分类:ENCRYPTED / CORRUPT。
- 兜底后端
pdfium-text-v1(pdf-extract,纯 Rust):worker 缺失或解析失败时 按 BackendPolicy 链回退(encrypted/unsupported 为终止码,不回退)。
§示例
use docparser_core::{plugins, DocumentEngine, Registry};
use docparser_pdf::{LayoutMode, PdfOptions};
let mut registry = Registry::new();
plugins::text::register_defaults(&mut registry);
// 不重排版式 + 只解析前 20 页(等价 CLI `--layout-mode raw --max-pages 20`)
let options = PdfOptions::new()
.with_layout_mode(LayoutMode::Raw)
.with_max_pages(20);
docparser_pdf::register_with(&mut registry, &options);
let doc = DocumentEngine::new(registry).parse("report.pdf")?;
println!("{} 页 / {} 字符", doc.pages.len(), doc.meta.text_length);
if let Some(pdf) = doc.meta.extra.get("pdf") {
println!("pdf 元数据: {pdf}"); // pdf_version / complexity / truncated / layout_modes
}Structs§
- PdfOptions
- PDF 解析选项:后端(页数截断)与插件(版式模式)共享同一份配置。
- PdfPlugin
- PDF 插件:
assemble里做行归并 / 表格 / 分栏(版式模式可配)。 - PdfText
Backend - 兜底后端 v1:pdf-extract(纯 Rust,无 dylib;CJK 无 ToUnicode 局限)。
- Pdfium
Worker Backend - 主后端:PDFium worker(库可用才 available)。
Enums§
- Layout
Mode - 版式模式(对齐 Python
layout_mode:auto/rebuild/raw)。
Functions§
- find_
library - 运行时 PDFium 库发现:
DOCPARSER_PDFIUM_LIB→ 发布 bundle → 开发环境 pypdfium2 / liteparse 自带 → 扫描常见 Python site-packages → 无。 - find_
ocr_ binary - find_
ocr_ models - is_
terminal - 便于外部核对终止码语义。
- register_
defaults - 注册 PDF 后端(worker 可用才注册;v1 恒可用)与插件(默认选项)。
- register_
with - 注册 PDF 后端与插件,并注入解析选项(版式模式 / 页数上限)。