use pdf_oxide::api::PdfBuilder;
use pdf_oxide::editor::{DocumentEditor, EditableDocument, SaveOptions};
use pdf_oxide::writer::PageSize;
use pdf_oxide::PdfDocument;
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
println!("=== Text Content Editing Example ===\n");
println!("Step 1: Creating PDF with 'Sample text'...");
let content = "Sample text";
let mut pdf = PdfBuilder::new()
.title("Text Edit Demo")
.page_size(PageSize::Letter)
.from_markdown(content)?;
pdf.save("text_before.pdf")?;
println!(" Created: text_before.pdf");
let mut doc = PdfDocument::open("text_before.pdf")?;
let original_text = doc.extract_text(0)?;
println!(" Original text: '{}'", original_text.trim());
println!("\nStep 2: Editing - changing 'Sample text' to 'SaMple TeXt'...");
let mut editor = DocumentEditor::open("text_before.pdf")?;
editor.edit_page(0, |page| {
let text_elements = page.find_text_containing("Sample");
println!(" Found {} text element(s) containing 'Sample'", text_elements.len());
for elem in text_elements {
let current_text = elem.text();
println!(" Current text: '{}'", current_text);
let new_text = current_text.replace("Sample text", "SaMple TeXt");
page.set_text(elem.id(), &new_text)?;
println!(" Changed to: '{}'", new_text);
}
Ok(())
})?;
println!("\nStep 3: Saving edited PDF...");
editor.save_with_options("text_after.pdf", SaveOptions::full_rewrite())?;
println!(" Saved: text_after.pdf");
println!("\nStep 4: Verification...");
let mut edited_doc = PdfDocument::open("text_after.pdf")?;
let edited_text = edited_doc.extract_text(0)?;
println!(" Before: '{}'", original_text.trim());
println!(" After: '{}'", edited_text.trim());
println!("\n=== Done! ===");
println!("\nOpen both PDFs to compare:");
println!(" - text_before.pdf (original)");
println!(" - text_after.pdf (edited)");
Ok(())
}