summaryrefslogtreecommitdiff
path: root/src/pdfgen.rs
blob: 0bca467023da8c4bff5393d031a74e2636fc74ba (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
49
50
51
52
use genpdf::Element as _;
use genpdf::{elements, style, fonts};

pub fn genpdf() -> Vec<u8> {
    let regular_bytes = include_bytes!("/usr/share/fonts/liberation/LiberationSans-Regular.ttf");
    let regular_font_data = fonts::FontData::new(regular_bytes.to_vec(), Some(printpdf::BuiltinFont::Helvetica)).expect("font data should be correct");

    let bold_bytes = include_bytes!("/usr/share/fonts/liberation/LiberationSans-Bold.ttf");
    let bold_font_data = fonts::FontData::new(bold_bytes.to_vec(), Some(printpdf::BuiltinFont::HelveticaBold)).expect("font data should be correct");

    let italic_bytes = include_bytes!("/usr/share/fonts/liberation/LiberationSans-Italic.ttf");
    let italic_font_data = fonts::FontData::new(italic_bytes.to_vec(), Some(printpdf::BuiltinFont::HelveticaOblique)).expect("font data should be correct");

    let bold_italic_bytes = include_bytes!("/usr/share/fonts/liberation/LiberationSans-BoldItalic.ttf");
    let bold_italic_font_data = fonts::FontData::new(bold_italic_bytes.to_vec(), Some(printpdf::BuiltinFont::HelveticaBoldOblique)).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).expect("should render pdf");
    buf
}