use pptx_to_md::{ParserConfig, PptxContainer, Result};
use std::env;
use std::fs;
use std::path::Path;
fn main() -> Result<()> {
let args: Vec<String> = env::args().collect();
let pptx_path = if args.len() > 1 {
&args[1]
} else {
eprintln!(
"Usage: cargo run --example memory_efficient_streaming <path/to/presentation.pptx>"
);
return Ok(());
};
println!("Processing PPTX file: {}", pptx_path);
let config = ParserConfig::builder().extract_images(true).build();
let mut streamer = PptxContainer::open(Path::new(pptx_path), config)?;
let output_dir = "output_streaming";
fs::create_dir_all(output_dir)?;
for slide_result in streamer.iter_slides() {
match slide_result {
Ok(slide) => {
println!(
"Processing slide {} ({} elements)",
slide.slide_number,
slide.elements.len()
);
if let Some(md_content) = slide.convert_to_md() {
let output_path = format!("{}/slide_{}.md", output_dir, slide.slide_number);
fs::write(&output_path, md_content)?;
println!("Saved slide {} to {}", slide.slide_number, output_path);
}
}
Err(e) => {
eprintln!("Error processing slide: {:?}", e);
}
}
}
println!("All slides processed successfully!");
Ok(())
}