use easypdf::prelude::*;
use std::path::PathBuf;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let out_dir = tempfile::tempdir()?;
let pdf_path: PathBuf = out_dir.path().join("large_doc.pdf");
{
let mut writer = EasyPdf::writer("Large Document").build()?;
for i in 1..=10 {
writer.add_page(PageSize::A4, Orientation::Portrait)?;
let text = PdfText::new(format!(
"Page {i}: This is sample content for demonstrating the streaming read strategy."
))
.font(PdfFont::helvetica(12.0));
writer.write_text(&text, 72.0, 700.0)?;
}
writer.finish(&pdf_path)?;
}
println!("Created 10-page PDF at: {}", pdf_path.display());
let text_full = EasyPdf::read(&pdf_path)
.strategy(ReadStrategy::Full)
.extract_text()?;
println!("\n[Full] Extracted {} chars", text_full.len());
let text_lazy = EasyPdf::read(&pdf_path)
.strategy(ReadStrategy::Lazy)
.extract_text()?;
println!("[Lazy] Extracted {} chars", text_lazy.len());
let text_streaming = EasyPdf::read(&pdf_path)
.strategy(ReadStrategy::Streaming)
.extract_text()?;
println!("[Streaming] Extracted {} chars", text_streaming.len());
let reader = EasyPdf::read(&pdf_path)
.strategy(ReadStrategy::Lazy)
.pages(0..3)
.open()?;
let partial_text = reader.extract_text()?;
println!("[Lazy pages 0..3] Extracted {} chars", partial_text.len());
println!("\nReadStrategy auto-selection:");
println!(" 1 MB -> {:?}", ReadStrategy::auto(1_000_000));
println!(" 50 MB -> {:?}", ReadStrategy::auto(50_000_000));
println!(" 200 MB -> {:?}", ReadStrategy::auto(200_000_000));
Ok(())
}