summaryrefslogtreecommitdiff
path: root/src/pdfgen.rs
blob: b8c7f7dce1c0903b0bf80cf905fe5e46e31d345e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use genpdf::Element as _;
use genpdf::{elements, style, fonts};
use crate::model::BCard;

pub fn genpdf(bcard: BCard) -> Vec<u8> {
    let regular_bytes = include_bytes!("../fonts/fira-sans.regular.ttf");
    let regular_font_data = fonts::FontData::new(regular_bytes.to_vec(), None).expect("font data should be correct");

    let bold_bytes = include_bytes!("../fonts/fira-sans.bold.ttf");
    let bold_font_data = fonts::FontData::new(bold_bytes.to_vec(), None).expect("font data should be correct");

    let italic_bytes = include_bytes!("../fonts/fira-sans.italic.ttf");
    let italic_font_data = fonts::FontData::new(italic_bytes.to_vec(), None).expect("font data should be correct");

    let bold_italic_bytes = include_bytes!("../fonts/fira-sans.bold-italic.ttf");
    let bold_italic_font_data = fonts::FontData::new(bold_italic_bytes.to_vec(), None).expect("font data should be correct");

    let font_family = fonts::FontFamily{ regular: regular_font_data, bold: bold_font_data, italic: italic_font_data, bold_italic: bold_italic_font_data };

    let mut doc = genpdf::Document::new(font_family);

    doc.set_title("BCard test");
    doc.set_minimal_conformance();
    doc.set_margins(10);
    doc.set_line_spacing(1.25);

    #[cfg(feature = "hyphenation")]
    {
        use hyphenation::Load;

        doc.set_hyphenator(
            hyphenation::Standard::from_embedded(hyphenation::Language::EnglishUS)
                .expect("Failed to load hyphenation data"),
        );
    }

    doc.push(
        elements::Paragraph::new("genpdf Demo Document")
            .aligned(elements::Alignment::Center)
            .styled(style::Style::new().bold().with_font_size(20)),
    );

    // TODO fill doc with real data

    let mut buf: Vec<u8> = Vec::new();
    doc.render(&mut buf);
    buf
}