use docparser_core::engine::DocumentEngine;
use docparser_core::plugins;
use docparser_core::registry::Registry;
use docparser_pdf::{LayoutMode, PdfOptions};
fn engine_with(mode: LayoutMode, max_pages: Option<usize>) -> DocumentEngine {
let mut registry = Registry::new();
plugins::text::register_defaults(&mut registry);
let mut options = PdfOptions::new().with_layout_mode(mode);
options.max_pages = max_pages;
docparser_pdf::register_with(&mut registry, &options);
DocumentEngine::new(registry)
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let path = std::env::args()
.nth(1)
.unwrap_or_else(|| "doc.pdf".to_string());
for mode in [LayoutMode::Auto, LayoutMode::Raw] {
match engine_with(mode, Some(3)).parse(&path) {
Ok(doc) => {
let blocks: usize = doc.pages.iter().map(|p| p.blocks.len()).sum();
println!(
"{:>7}: {} 页 / {} 块 / {} 字符",
mode.as_str(),
doc.pages.len(),
blocks,
doc.meta.text_length
);
if let Some(page) = doc.pages.first() {
for block in page.blocks.iter().take(3) {
println!(" {:?}: {}", block.kind, block.content);
}
}
}
Err(e) => println!("{:>7}: 失败 [{}] {}", mode.as_str(), e.code, e.message),
}
}
Ok(())
}