summaryrefslogtreecommitdiff
path: root/src/model/vcard.rs
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2021-03-09 21:32:18 +0100
committerRobin Krahl <robin.krahl@ireas.org>2021-03-09 21:32:18 +0100
commitbcdfeb3d4e2569e073a34be67f38f57da90be723 (patch)
tree918fe2f00bf4eefb373afbbe9d10e522c80086d2 /src/model/vcard.rs
parent4d2edd797d5f8054284bc990371f28e918ea044b (diff)
downloadwasm-card-bcdfeb3d4e2569e073a34be67f38f57da90be723.tar.gz
wasm-card-bcdfeb3d4e2569e073a34be67f38f57da90be723.tar.bz2
Use LinearLayout for vcardmain
Diffstat (limited to 'src/model/vcard.rs')
-rw-r--r--src/model/vcard.rs87
1 files changed, 35 insertions, 52 deletions
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<String, ()> {
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)
+ }
}