From bcdfeb3d4e2569e073a34be67f38f57da90be723 Mon Sep 17 00:00:00 2001 From: Robin Krahl Date: Tue, 9 Mar 2021 21:32:18 +0100 Subject: Use LinearLayout for vcard --- src/model/vcard.rs | 87 ++++++++++++++++++++++-------------------------------- 1 file changed, 35 insertions(+), 52 deletions(-) (limited to 'src/model/vcard.rs') diff --git a/src/model/vcard.rs b/src/model/vcard.rs index ea66224..118d543 100644 --- a/src/model/vcard.rs +++ b/src/model/vcard.rs @@ -242,21 +242,21 @@ impl VCardData { pub fn generate_pdf(&self) -> Result { let regular_bytes = - include_bytes!("/usr/share/fonts/liberation/LiberationSans-Regular.ttf"); + include_bytes!("/usr/share/fonts/truetype/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_bytes = include_bytes!("/usr/share/fonts/truetype/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_bytes = include_bytes!("/usr/share/fonts/truetype/liberation/LiberationSans-Italic.ttf"); let italic_font_data = fonts::FontData::new( italic_bytes.to_vec(), Some(printpdf::BuiltinFont::HelveticaOblique), @@ -264,7 +264,7 @@ impl VCardData { .expect("font data should be correct"); let bold_italic_bytes = - include_bytes!("/usr/share/fonts/liberation/LiberationSans-BoldItalic.ttf"); + include_bytes!("/usr/share/fonts/truetype/liberation/LiberationSans-BoldItalic.ttf"); let bold_italic_font_data = fonts::FontData::new( bold_italic_bytes.to_vec(), Some(printpdf::BuiltinFont::HelveticaBoldOblique), @@ -294,52 +294,7 @@ impl VCardData { .aligned(elements::Alignment::Center) .styled(style::Style::new().bold().with_font_size(20)), ); - - let mut card_data = elements::Paragraph::new(""); - - let vcard_data = self.clone(); - - if let Some(name) = vcard_data.names.get(0) { - card_data.push_styled( - name.generate_fn(), - style::Effect::Bold - ); - } - card_data.push( - "" - ); - if let Some(communication) = vcard_data.communications.get(0) { - card_data.push( - communication.email_address.clone() - ); - } - card_data.push( - "" - ); - if let Some(address) = vcard_data.addresses.get(0) { - card_data.push( - address.street.clone() - ); - card_data.push( - format!("{} {} {}", address.code, address.locality, address.extension) - ); - card_data.push( - format!("{} {}", address.region, address.country) - ); - } - card_data.push( - "" - ); - for telephone in vcard_data.telephones { - card_data.push( - telephone.number - ); - } - - let framed_card_data = elements::FramedElement::new( - card_data - ); - + let mut table = elements::TableLayout::new(vec![1,1]); table.set_cell_decorator( elements::FrameCellDecorator::new(false, false, false) @@ -347,8 +302,8 @@ impl VCardData { for _i in 0..4 { table .row() - .element(framed_card_data.clone()) - .element(framed_card_data.clone()) + .element(self.create_card_element()) + .element(self.create_card_element()) .push() .expect("invalid table row"); } @@ -366,4 +321,32 @@ impl VCardData { Err(_) => Err(()), } } + + fn create_card_element(&self) -> impl genpdf::Element { + let mut layout = elements::LinearLayout::vertical(); + + if let Some(name) = self.names.get(0) { + layout.push(elements::Text::new(style::StyledString::new( + name.generate_fn(), + style::Effect::Bold + ))); + } + if let Some(communication) = self.communications.get(0) { + layout.push(elements::Text::new(&communication.email_address)); + } + if let Some(address) = self.addresses.get(0) { + layout.push(elements::Text::new(&address.street)); + layout.push(elements::Text::new( + format!("{} {} {}", address.code, address.locality, address.extension) + )); + layout.push(elements::Text::new( + format!("{} {}", address.region, address.country) + )); + } + for telephone in &self.telephones { + layout.push(elements::Text::new(&telephone.number)); + } + + elements::FramedElement::new(layout) + } } -- cgit v1.2.3