From 9faf2a4af120290bbfbb4c36a320e81fa0458de3 Mon Sep 17 00:00:00 2001 From: Cato Auestad Date: Mon, 18 Apr 2022 08:34:08 +0200 Subject: [PATCH] Let XmpMetadata read from PdfMetadata struct Since there can be a substantial amount of metadata having them all as parameter is going to be overkill. Hence, splitting this out to use the PdfMetadata struct will be easier to add more fields. --- src/pdf_metadata.rs | 8 +------- src/xmp_metadata.rs | 24 +++++++++--------------- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/src/pdf_metadata.rs b/src/pdf_metadata.rs index 35a85ba..5e43419 100644 --- a/src/pdf_metadata.rs +++ b/src/pdf_metadata.rs @@ -63,13 +63,7 @@ impl PdfMetadata { let metadata = self.clone(); let xmp_obj = { if self.conformance.must_have_xmp_metadata() { - Some(self.xmp_metadata.into_obj( - self.conformance.clone(), - self.trapping, - self.creation_date.clone(), - self.modification_date.clone(), - self.metadata_date, - self.document_title.clone())) + Some(self.xmp_metadata.into_obj(&metadata)) } else { None } diff --git a/src/xmp_metadata.rs b/src/xmp_metadata.rs index 471a3af..8f56bbc 100644 --- a/src/xmp_metadata.rs +++ b/src/xmp_metadata.rs @@ -3,7 +3,7 @@ use crate::OffsetDateTime; use lopdf; -use PdfConformance; +use PdfMetadata; use utils::random_character_string_32; /// Initial struct for Xmp metatdata. This should be expanded later for XML handling, etc. @@ -34,29 +34,23 @@ impl XmpMetadata { /// Consumes the XmpMetadata and turns it into a PDF Object. /// This is similar to the - pub(in crate) fn into_obj(self, - conformance: PdfConformance, - trapping: bool, - creation_date: OffsetDateTime, - modification_date: OffsetDateTime, - metadata_date: OffsetDateTime, - document_title: S) - -> lopdf::Object where S: Into + ::std::fmt::Display + pub(in crate) fn into_obj(self, m: &PdfMetadata) + -> lopdf::Object { use lopdf::{Stream as LoStream, Dictionary as LoDictionary}; use lopdf::Object::*; use std::iter::FromIterator; // Shared between XmpMetadata and DocumentInfo - let trapping = if trapping { "True" } else { "False" }; + let trapping = if m.trapping { "True" } else { "False" }; // let xmp_instance_id = "2898d852-f86f-4479-955b-804d81046b19"; let instance_id = random_character_string_32(); - let create_date = to_pdf_xmp_date(creation_date); - let modification_date = to_pdf_xmp_date(modification_date); - let metadata_date = to_pdf_xmp_date(metadata_date); + let create_date = to_pdf_xmp_date(m.creation_date); + let modification_date = to_pdf_xmp_date(m.modification_date); + let metadata_date = to_pdf_xmp_date(m.metadata_date); - let pdf_x_version = conformance.get_identifier_string(); + let pdf_x_version = m.conformance.get_identifier_string(); let document_version = self.document_version.to_string(); let document_id = self.document_id.to_string(); @@ -66,7 +60,7 @@ impl XmpMetadata { }; let xmp_metadata = format!(include_str!("../assets/catalog_xmp_metadata.txt"), - create_date, modification_date, metadata_date, document_title, document_id, + create_date, modification_date, metadata_date, m.document_title, document_id, instance_id, rendition_class, document_version, pdf_x_version, trapping); Stream(LoStream::new(LoDictionary::from_iter(vec![