use oxidize_pdf::{PdfDocument, PdfReader};
use std::path::Path;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let pdf_path = "test-pdfs/Cold_Email_Hacks.pdf";
if !Path::new(pdf_path).exists() {
println!("❌ PDF not found: {}", pdf_path);
return Ok(());
}
println!("📄 Extrayendo texto de múltiples páginas del PDF Cold_Email_Hacks.pdf");
println!("=====================================================================");
let reader = PdfReader::open(pdf_path)?;
let document = PdfDocument::new(reader);
let total_pages = document.page_count()?;
println!("📊 Total de páginas en el documento: {}", total_pages);
let pages_to_try = [0, 1, 2, 3, 4, 5, 10, 13, 20, 25, 30];
for &page_idx in &pages_to_try {
if page_idx >= total_pages {
continue;
}
let page_num = page_idx + 1;
println!("\n🔍 Intentando extraer texto de la página {}...", page_num);
match document.extract_text_from_page(page_idx) {
Ok(page_text) => {
let text = &page_text.text;
if text.trim().is_empty() {
println!(
" ⚠️ Página {} está vacía o no tiene texto extraíble",
page_num
);
} else {
println!(" ✅ Página {} - Texto extraído exitosamente!", page_num);
let trimmed_text = text.trim();
println!(" 📊 Estadísticas:");
println!(" • Caracteres: {}", trimmed_text.len());
println!(
" • Palabras: {}",
trimmed_text.split_whitespace().count()
);
println!(" • Líneas: {}", trimmed_text.lines().count());
if page_idx == 13 {
println!("\n📄 CONTENIDO COMPLETO DE LA PÁGINA 14:");
println!("======================================");
println!("{}", text);
println!("======================================");
} else {
let preview_len = std::cmp::min(200, trimmed_text.len());
let preview = &trimmed_text[..preview_len];
println!(
" 📝 Preview: \"{}{}\"",
preview,
if trimmed_text.len() > 200 { "..." } else { "" }
);
}
if page_idx == 13 && !page_text.fragments.is_empty() {
println!("\n📝 Fragmentos de texto (página 14):");
for (i, fragment) in page_text.fragments.iter().take(10).enumerate() {
println!(
" {}. '{}' en ({:.1}, {:.1})",
i + 1,
fragment.text.trim().chars().take(50).collect::<String>(),
fragment.x,
fragment.y
);
}
if page_text.fragments.len() > 10 {
println!(" ... y {} fragmentos más", page_text.fragments.len() - 10);
}
}
}
}
Err(e) => {
println!(" ❌ Error en página {}: {}", page_num, e);
if page_idx == 13 {
println!(" 💡 Para la página 14 específicamente:");
println!(" • El PDF se abre correctamente (Issue #47 resuelto)");
println!(" • El error se debe a referencias de objetos que requieren reconstrucción");
println!(
" • Esto es un problema de implementación, no de corrupción del PDF"
);
}
}
}
}
println!("\n🏁 Prueba de extracción múltiple completada!");
Ok(())
}