Skip to main content

Crate docparser_pdf

Crate docparser_pdf 

Source
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 里做行归并 / 表格 / 分栏(版式模式可配)。
PdfTextBackend
兜底后端 v1:pdf-extract(纯 Rust,无 dylib;CJK 无 ToUnicode 局限)。
PdfiumWorkerBackend
主后端:PDFium worker(库可用才 available)。

Enums§

LayoutMode
版式模式(对齐 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 后端与插件,并注入解析选项(版式模式 / 页数上限)。