boolean_logic/
pdf.rs

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}