1use ppt_rs::opc::package::Package;
4use std::fs;
5
6fn main() -> Result<(), Box<dyn std::error::Error>> {
7 use ppt_rs::generator::{create_pptx_with_content, SlideContent};
9
10 let slides = vec![
11 SlideContent::new("Sample Presentation")
12 .add_bullet("This is a sample slide")
13 .add_bullet("Created for reading demonstration"),
14 SlideContent::new("Second Slide")
15 .add_bullet("More content here")
16 .add_bullet("Ready to be read"),
17 ];
18
19 let pptx_data = create_pptx_with_content("Sample", slides)?;
20 fs::write("sample_to_read.pptx", pptx_data)?;
21
22 println!("Reading PPTX file: sample_to_read.pptx\n");
24
25 let package = Package::open("sample_to_read.pptx")?;
26
27 println!("Package Information:");
28 println!(" Total parts: {}", package.part_count());
29 println!("\nPackage Contents:");
30
31 let paths = package.part_paths();
32 for path in &paths {
33 if let Some(content) = package.get_part(path) {
34 println!(" {} ({} bytes)", path, content.len());
35 }
36 }
37
38 println!("\n--- Key Parts Analysis ---");
40
41 if let Some(pres_content) = package.get_part("ppt/presentation.xml") {
43 println!("\n✓ presentation.xml found ({} bytes)", pres_content.len());
44 if let Ok(content_str) = std::str::from_utf8(pres_content) {
45 if content_str.contains("<p:sldIdLst>") {
46 println!(" - Contains slide list");
47 }
48 }
49 }
50
51 let mut slide_count = 0;
53 for path in &paths {
54 if path.starts_with("ppt/slides/slide") && path.ends_with(".xml") {
55 slide_count += 1;
56 if let Some(content) = package.get_part(path) {
57 println!("\n✓ {} found ({} bytes)", path, content.len());
58 }
59 }
60 }
61 println!("\nTotal slides: {}", slide_count);
62
63 if let Some(core_content) = package.get_part("docProps/core.xml") {
65 println!("\n✓ docProps/core.xml found ({} bytes)", core_content.len());
66 if let Ok(content_str) = std::str::from_utf8(core_content) {
67 if content_str.contains("<dc:title>") {
68 println!(" - Contains title metadata");
69 }
70 }
71 }
72
73 if let Some(rels_content) = package.get_part("_rels/.rels") {
75 println!("\n✓ _rels/.rels found ({} bytes)", rels_content.len());
76 if let Ok(content_str) = std::str::from_utf8(rels_content) {
77 let rel_count = content_str.matches("<Relationship").count();
78 println!(" - Contains {} relationships", rel_count);
79 }
80 }
81
82 if let Some(ct_content) = package.get_part("[Content_Types].xml") {
84 println!("\n✓ [Content_Types].xml found ({} bytes)", ct_content.len());
85 if let Ok(content_str) = std::str::from_utf8(ct_content) {
86 let override_count = content_str.matches("<Override").count();
87 let default_count = content_str.matches("<Default").count();
88 println!(" - Contains {} Override entries", override_count);
89 println!(" - Contains {} Default entries", default_count);
90 }
91 }
92
93 println!("\n--- Summary ---");
95 println!("Successfully read PPTX package with {} parts", package.part_count());
96 println!("Package structure is valid and can be modified");
97
98 Ok(())
99}