1use crate::{exam::Exam, question_type};
2use genpdf::{style::Style, Document};
3
4use crate::question::Question;
5
6#[allow(dead_code)]
8pub fn generate_pdf<T: Question>(exam: &Exam<T>) {
9 println!("Generating PDF file...");
10
11 let font_family = genpdf::fonts::from_files("./fonts", "LiberationSans", None)
12 .expect("Failed to load font family");
13 let mut doc = genpdf::Document::new(font_family);
14 doc.set_title("Math Test");
15 let mut decorator = genpdf::SimplePageDecorator::new();
16 decorator.set_margins(10);
17 doc.set_page_decorator(decorator);
18 if exam.get_question_type()
19 == question_type::QuestionType::Equation(question_type::EquationType::TwoVariables)
20 {
21 doc.set_font_size(11);
22 } else {
23 doc.set_font_size(12);
24 }
25
26 let questions = exam.get_questions();
27 let mut counter = 1;
28 for question in questions {
29 push_question(question, counter, &mut doc);
30 counter += 1;
31 }
32
33 let file_name = "math_test.pdf";
34 doc.render_to_file(file_name)
35 .expect("Failed to write PDF file");
36
37 println!("File {} generated", file_name);
38}
39
40fn push_question<T: Question>(question: &T, id: i32, doc: &mut Document) {
42 let title = format!("Question {}: ", id);
43
44 let mut title_element = genpdf::elements::Paragraph::new("");
45 let style = Style::new();
46 let style = style.bold();
47 title_element.push_styled(title, style);
48
49 doc.push(title_element);
50 for line in question.to_string().lines() {
51 doc.push(genpdf::elements::Paragraph::new(line));
52 }
53
54 doc.push(genpdf::elements::Paragraph::new(""));
55 let separator = "=============";
56 doc.push(genpdf::elements::Paragraph::new(separator));
57 doc.push(genpdf::elements::Paragraph::new(""));
58}