1use ppt_rs::generator::{SlideContent, Table, TableRow, TableCell, TableBuilder, create_pptx_with_content};
7use std::fs;
8
9fn main() -> Result<(), Box<dyn std::error::Error>> {
10 println!("╔════════════════════════════════════════════════════════════╗");
11 println!("║ Generating Table Examples ║");
12 println!("╚════════════════════════════════════════════════════════════╝");
13 println!();
14
15 fs::create_dir_all("examples/output")?;
16
17 println!("1. Creating simple table...");
19 create_simple_table_example()?;
20 println!(" ✓ Created: examples/output/simple_table.pptx");
21 println!();
22
23 println!("2. Creating styled table...");
25 create_styled_table_example()?;
26 println!(" ✓ Created: examples/output/styled_table.pptx");
27 println!();
28
29 println!("3. Creating data table...");
31 create_data_table_example()?;
32 println!(" ✓ Created: examples/output/data_table.pptx");
33 println!();
34
35 println!("4. Creating multiple tables...");
37 create_multiple_tables_example()?;
38 println!(" ✓ Created: examples/output/multiple_tables.pptx");
39 println!();
40
41 println!("✅ All table examples generated successfully!");
42 println!();
43 println!("Generated files:");
44 println!(" - examples/output/simple_table.pptx");
45 println!(" - examples/output/styled_table.pptx");
46 println!(" - examples/output/data_table.pptx");
47 println!(" - examples/output/multiple_tables.pptx");
48 println!();
49 println!("Note: Tables are generated as XML structures and can be");
50 println!(" integrated into slides for full rendering.");
51 println!();
52
53 Ok(())
54}
55
56fn create_simple_table_example() -> Result<(), Box<dyn std::error::Error>> {
57 let table = Table::from_data(
58 vec![
59 vec!["Name", "Age"],
60 vec!["Alice", "30"],
61 vec!["Bob", "25"],
62 ],
63 vec![2000000, 2000000],
64 500000,
65 1500000,
66 );
67
68 let slides = vec![
69 SlideContent::new("Simple 2x2 Table")
70 .add_bullet("Table with basic structure")
71 .add_bullet("Headers and data rows"),
72 SlideContent::new("Table Data")
73 .table(table),
74 ];
75
76 let pptx_data = create_pptx_with_content("Simple Table", slides)?;
77 fs::write("examples/output/simple_table.pptx", pptx_data)?;
78 Ok(())
79}
80
81fn create_styled_table_example() -> Result<(), Box<dyn std::error::Error>> {
82 let header_cells = vec![
83 TableCell::new("Name").bold().background_color("003366"),
84 TableCell::new("Age").bold().background_color("003366"),
85 TableCell::new("City").bold().background_color("003366"),
86 ];
87 let header_row = TableRow::new(header_cells);
88
89 let data_rows = vec![
90 TableRow::new(vec![
91 TableCell::new("Alice"),
92 TableCell::new("30"),
93 TableCell::new("NYC"),
94 ]),
95 TableRow::new(vec![
96 TableCell::new("Bob"),
97 TableCell::new("28"),
98 TableCell::new("LA"),
99 ]),
100 TableRow::new(vec![
101 TableCell::new("Carol"),
102 TableCell::new("35"),
103 TableCell::new("Chicago"),
104 ]),
105 ];
106
107 let table = Table::new(
108 vec![vec![header_row], data_rows].concat(),
109 vec![1500000, 1500000, 1500000],
110 500000,
111 1500000,
112 );
113
114 let slides = vec![
115 SlideContent::new("Styled Table")
116 .title_bold(true)
117 .title_color("003366")
118 .add_bullet("Table with formatting"),
119 SlideContent::new("People Data")
120 .table(table),
121 ];
122
123 let pptx_data = create_pptx_with_content("Styled Table", slides)?;
124 fs::write("examples/output/styled_table.pptx", pptx_data)?;
125 Ok(())
126}
127
128fn create_data_table_example() -> Result<(), Box<dyn std::error::Error>> {
129 let header_cells = vec![
130 TableCell::new("Product").bold().background_color("1F497D"),
131 TableCell::new("Revenue").bold().background_color("1F497D"),
132 TableCell::new("Growth").bold().background_color("1F497D"),
133 ];
134 let header_row = TableRow::new(header_cells);
135
136 let data_rows = vec![
137 TableRow::new(vec![
138 TableCell::new("Product A"),
139 TableCell::new("$100K"),
140 TableCell::new("+15%"),
141 ]),
142 TableRow::new(vec![
143 TableCell::new("Product B"),
144 TableCell::new("$150K"),
145 TableCell::new("+22%"),
146 ]),
147 TableRow::new(vec![
148 TableCell::new("Product C"),
149 TableCell::new("$200K"),
150 TableCell::new("+18%"),
151 ]),
152 ];
153
154 let table = Table::new(
155 vec![vec![header_row], data_rows].concat(),
156 vec![2000000, 2000000, 1500000],
157 457200,
158 1400000,
159 );
160
161 let slides = vec![
162 SlideContent::new("Sales Data Table")
163 .title_bold(true)
164 .title_size(48)
165 .add_bullet("Quarterly sales figures"),
166 SlideContent::new("Q1 2025 Sales")
167 .table(table),
168 SlideContent::new("Summary")
169 .content_bold(true)
170 .add_bullet("Total Revenue: $450K")
171 .add_bullet("Average Growth: +18.3%")
172 .add_bullet("Best Performer: Product C"),
173 ];
174
175 let pptx_data = create_pptx_with_content("Sales Data", slides)?;
176 fs::write("examples/output/data_table.pptx", pptx_data)?;
177 Ok(())
178}
179
180fn create_multiple_tables_example() -> Result<(), Box<dyn std::error::Error>> {
181 let emp_header = TableRow::new(vec![
183 TableCell::new("ID").bold().background_color("4F81BD"),
184 TableCell::new("Name").bold().background_color("4F81BD"),
185 TableCell::new("Department").bold().background_color("4F81BD"),
186 ]);
187 let emp_rows = vec![
188 TableRow::new(vec![
189 TableCell::new("001"),
190 TableCell::new("Alice"),
191 TableCell::new("Engineering"),
192 ]),
193 TableRow::new(vec![
194 TableCell::new("002"),
195 TableCell::new("Bob"),
196 TableCell::new("Sales"),
197 ]),
198 TableRow::new(vec![
199 TableCell::new("003"),
200 TableCell::new("Carol"),
201 TableCell::new("Marketing"),
202 ]),
203 ];
204 let emp_table = Table::new(
205 vec![vec![emp_header], emp_rows].concat(),
206 vec![1000000, 2000000, 2000000],
207 500000,
208 1500000,
209 );
210
211 let proj_header = TableRow::new(vec![
213 TableCell::new("Project").bold().background_color("003366"),
214 TableCell::new("Status").bold().background_color("003366"),
215 TableCell::new("Owner").bold().background_color("003366"),
216 ]);
217 let proj_rows = vec![
218 TableRow::new(vec![
219 TableCell::new("Project A"),
220 TableCell::new("In Progress"),
221 TableCell::new("Alice"),
222 ]),
223 TableRow::new(vec![
224 TableCell::new("Project B"),
225 TableCell::new("Completed"),
226 TableCell::new("Bob"),
227 ]),
228 TableRow::new(vec![
229 TableCell::new("Project C"),
230 TableCell::new("Planning"),
231 TableCell::new("Carol"),
232 ]),
233 ];
234 let proj_table = Table::new(
235 vec![vec![proj_header], proj_rows].concat(),
236 vec![2000000, 2000000, 1500000],
237 500000,
238 1500000,
239 );
240
241 let slides = vec![
242 SlideContent::new("Multiple Tables")
243 .title_bold(true)
244 .add_bullet("Slide with multiple tables"),
245 SlideContent::new("Table 1: Employees")
246 .table(emp_table),
247 SlideContent::new("Table 2: Projects")
248 .table(proj_table),
249 SlideContent::new("Summary")
250 .add_bullet("Total Employees: 3")
251 .add_bullet("Active Projects: 3")
252 .add_bullet("Completion Rate: 33%"),
253 ];
254
255 let pptx_data = create_pptx_with_content("Multiple Tables", slides)?;
256 fs::write("examples/output/multiple_tables.pptx", pptx_data)?;
257 Ok(())
258}
259
260#[allow(dead_code)]
262fn create_table_structure() -> Table {
263 TableBuilder::new(vec![1000000, 1000000, 1000000])
265 .position(500000, 1000000)
266 .add_simple_row(vec!["Header 1", "Header 2", "Header 3"])
267 .add_simple_row(vec!["Data 1", "Data 2", "Data 3"])
268 .add_simple_row(vec!["Data 4", "Data 5", "Data 6"])
269 .build()
270}
271
272#[allow(dead_code)]
274fn create_styled_table() -> Table {
275 let header_cells = vec![
276 TableCell::new("Name").bold().background_color("003366"),
277 TableCell::new("Age").bold().background_color("003366"),
278 TableCell::new("City").bold().background_color("003366"),
279 ];
280 let header_row = TableRow::new(header_cells);
281
282 let data_cells = vec![
283 TableCell::new("Alice"),
284 TableCell::new("30"),
285 TableCell::new("NYC"),
286 ];
287 let data_row = TableRow::new(data_cells);
288
289 Table::new(
290 vec![header_row, data_row],
291 vec![1000000, 1000000, 1000000],
292 500000,
293 1000000,
294 )
295}