summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/model/property_groups/address.rs2
-rw-r--r--src/model/property_groups/name.rs2
-rw-r--r--src/model/property_groups/telephone.rs2
-rw-r--r--src/model/vcard.rs87
4 files changed, 38 insertions, 55 deletions
diff --git a/src/model/property_groups/address.rs b/src/model/property_groups/address.rs
index 00bca0b..e50a59a 100644
--- a/src/model/property_groups/address.rs
+++ b/src/model/property_groups/address.rs
@@ -1,7 +1,7 @@
use crate::model::input_fields::VCardPropertyInputField;
use crate::model::*;
-#[derive(Clone, Debug, PartialEq)]
+#[derive(Clone, Debug, Default, PartialEq)]
pub struct Address {
pub post_office_box: String,
pub extension: String,
diff --git a/src/model/property_groups/name.rs b/src/model/property_groups/name.rs
index eb0d9da..4a4d72c 100644
--- a/src/model/property_groups/name.rs
+++ b/src/model/property_groups/name.rs
@@ -16,7 +16,7 @@ use crate::model::*;
///
/// assert_eq!(name.generate_fn(), String::from("Sir Arthur Charles Clarke, CBE FRAS"));
/// ```
-#[derive(Clone, Debug, PartialEq)]
+#[derive(Clone, Debug, Default, PartialEq)]
pub struct Name {
pub prefix: String,
pub first_name: String,
diff --git a/src/model/property_groups/telephone.rs b/src/model/property_groups/telephone.rs
index 03de4ee..dee28e1 100644
--- a/src/model/property_groups/telephone.rs
+++ b/src/model/property_groups/telephone.rs
@@ -1,7 +1,7 @@
use crate::model::input_fields::VCardPropertyInputField;
use crate::model::*;
-#[derive(Clone, Debug, PartialEq)]
+#[derive(Clone, Debug, Default, PartialEq)]
pub struct Telephone {
pub number: String,
pub work: bool,
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)
+ }
}