1use genpdf::Size;
2
3use crate::evaluator_result::EvaluatorResult;
4
5#[allow(dead_code)]
6impl EvaluatorResult {
7 pub fn save_to_pdf(&self, file_name: &str) {
8 use genpdf::elements;
9 let default_font = genpdf::fonts::from_files("files", "calibri", None)
10 .expect("Failed to load the default font family");
11 let mut doc = genpdf::Document::new(default_font);
12 doc.set_title("Truth Table");
13 doc.set_font_size(14);
14 doc.set_line_spacing(1.5);
15
16 if let Some(header) = self.result.first() {
17 let header:Vec<&String> = header.iter().map(|x| x.0).collect();
18 let total_chars = header.iter().map(|x|x.len()).sum::<usize>();
19 let w = total_chars as f32 * 0.352778 * 10.0;
20 doc.set_paper_size(Size{ width: (w).into(), height: 100.into() });
21 let weights: Vec<usize> = header.iter().map(|x| x.len().max(5)).collect();
22 let mut table = elements::TableLayout::new(weights);
23 table.set_cell_decorator(elements::FrameCellDecorator::new(true, true, true));
24 let mut row = table.row();
25 for h in header {
26 let mut e = elements::Paragraph::new(h);
27 e.set_alignment(genpdf::Alignment::Center);
28 row.push_element(e);
29 }
30 row.push().expect("Invalid table row");
31 for r in self.result.iter() {
32 let values:Vec<String> = r.iter().map(|x| x.1.to_string()).collect();
33 let mut row = table.row();
34 for ri in values {
35 let mut e = elements::Paragraph::new(ri);
36 e.set_alignment(genpdf::Alignment::Center);
37 row.push_element(e);
38 }
39 row.push().expect("Invalid table row");
40 }
41
42 doc.push(table);
43 doc.render_to_file(file_name).expect("Failed to write PDF file");
44 }
45 }
46}