From 960bf51a515e0778ff44c10e9abb7385b3369b05 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 3 Aug 2022 14:44:56 +0200 Subject: [PATCH] Fix PDF embedding --- drafthorse/pdf.py | 12 ++- .../schema/ZUGFeRD2p2_extension_schema.xmp | 68 ++++++++++++++ .../ZUGFeRD2p2_extension_schema_BASIC.xmp | 88 ------------------- .../ZUGFeRD2p2_extension_schema_EN16931.xmp | 88 ------------------- .../ZUGFeRD2p2_extension_schema_EXTENDED.xmp | 88 ------------------- .../ZUGFeRD2p2_extension_schema_MINIMUM.xmp | 88 ------------------- 6 files changed, 73 insertions(+), 359 deletions(-) create mode 100644 drafthorse/schema/ZUGFeRD2p2_extension_schema.xmp delete mode 100644 drafthorse/schema/ZUGFeRD2p2_extension_schema_BASIC.xmp delete mode 100644 drafthorse/schema/ZUGFeRD2p2_extension_schema_EN16931.xmp delete mode 100644 drafthorse/schema/ZUGFeRD2p2_extension_schema_EXTENDED.xmp delete mode 100644 drafthorse/schema/ZUGFeRD2p2_extension_schema_MINIMUM.xmp diff --git a/drafthorse/pdf.py b/drafthorse/pdf.py index a8459ff..f70c8ae 100644 --- a/drafthorse/pdf.py +++ b/drafthorse/pdf.py @@ -47,8 +47,6 @@ def attach_xml(original_pdf, xml_data, level="BASIC"): reader = PdfReader(BytesIO(original_pdf)) output = PdfWriter() - # for page in reader.pages: - # output.addPage(page) output._header = "%PDF-1.6\r\n%\xc7\xec\x8f\xa2".encode() output.append_pages_from_reader(reader) @@ -105,7 +103,7 @@ def _prepare_pdf_metadata_xml(level, pdf_metadata): nsmap_pdf = {"pdf": "http://ns.adobe.com/pdf/1.3/"} nsmap_xmp = {"xmp": "http://ns.adobe.com/xap/1.0/"} nsmap_pdfaid = {"pdfaid": "http://www.aiim.org/pdfa/ns/id/"} - nsmap_zf = {"zf": "urn:ferd:pdfa:CrossIndustryDocument:invoice:1p0#"} + nsmap_zf = {"zf": "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"} ns_x = "{%s}" % nsmap_x["x"] ns_dc = "{%s}" % nsmap_dc["dc"] ns_rdf = "{%s}" % nsmap_rdf["rdf"] @@ -158,7 +156,7 @@ def _prepare_pdf_metadata_xml(level, pdf_metadata): fx_doc_filename = etree.SubElement( zugferd_desc, ns_zf + "DocumentFileName", nsmap=nsmap_zf ) - fx_doc_filename.text = "{}.xml".format(level) + fx_doc_filename.text = "factur-x.xml" fx_doc_version = etree.SubElement(zugferd_desc, ns_zf + "Version", nsmap=nsmap_zf) fx_doc_version.text = "1.0" fx_conformance_level = etree.SubElement( @@ -167,7 +165,7 @@ def _prepare_pdf_metadata_xml(level, pdf_metadata): fx_conformance_level.text = level xmp_file = os.path.join( - os.path.dirname(__file__), "schema", "ZUGFeRD2p2_extension_schema_{}.xmp".format(level) + os.path.dirname(__file__), "schema", "ZUGFeRD2p2_extension_schema.xmp".format(level) ) # Reason for defining a parser below: # http://lxml.de/FAQ.html#why-doesn-t-the-pretty-print-option-reformat-my-xml-output @@ -219,10 +217,10 @@ def _facturx_update_metadata_add_attachment( {NameObject("/F"): file_entry_obj, NameObject("/UF"): file_entry_obj} ) - fname_obj = createStringObject(facturx_level + ".xml") + fname_obj = createStringObject("factur-x.xml") filespec_dict = DictionaryObject( { - NameObject("/AFRelationship"): NameObject("/Alternative"), + NameObject("/AFRelationship"): NameObject("/Data" if facturx_level in ("BASIC-WL", "MINIMUM") else "/Alternative"), NameObject("/Desc"): createStringObject( "Invoice metadata conforming to ZUGFeRD standard (http://www.ferd-net.de/front_content.php?idcat=231&lang=4)" ), diff --git a/drafthorse/schema/ZUGFeRD2p2_extension_schema.xmp b/drafthorse/schema/ZUGFeRD2p2_extension_schema.xmp new file mode 100644 index 0000000..8b6d1ae --- /dev/null +++ b/drafthorse/schema/ZUGFeRD2p2_extension_schema.xmp @@ -0,0 +1,68 @@ + + + + + + + BASIC + factur-x.xml + INVOICE + 1.0 + + + + + + + + + Factur-X PDF/A Extension Schema + urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0# + fx + + + + DocumentFileName + Text + external + name of the embedded XML invoice file + + + DocumentType + Text + external + INVOICE + + + Version + Text + external + The actual version of the Factur-X XML schema + + + ConformanceLevel + Text + external + The conformance level of the embedded Factur-X data + + + + + + + + \ No newline at end of file diff --git a/drafthorse/schema/ZUGFeRD2p2_extension_schema_BASIC.xmp b/drafthorse/schema/ZUGFeRD2p2_extension_schema_BASIC.xmp deleted file mode 100644 index 97b52b5..0000000 --- a/drafthorse/schema/ZUGFeRD2p2_extension_schema_BASIC.xmp +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - BASIC - BASIC.xml - INVOICE - 1.0 - - - - - - - - - ZUGFeRD PDFA Extension Schema - urn:ferd:pdfa:CrossIndustryDocument:invoice:1p0# - fx - - - - DocumentFileName - Text - external - name of the embedded XML invoice file - - - DocumentType - Text - external - INVOICE - - - Version - Text - external - The actual version of the ZUGFeRD XML schema - - - ConformanceLevel - Text - external - The conformance level of the embedded ZUGFeRD data - - - - - - - - diff --git a/drafthorse/schema/ZUGFeRD2p2_extension_schema_EN16931.xmp b/drafthorse/schema/ZUGFeRD2p2_extension_schema_EN16931.xmp deleted file mode 100644 index 4ecf202..0000000 --- a/drafthorse/schema/ZUGFeRD2p2_extension_schema_EN16931.xmp +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - EN16931 - EN16931.xml - INVOICE - 1.0 - - - - - - - - - ZUGFeRD PDFA Extension Schema - urn:ferd:pdfa:CrossIndustryDocument:invoice:1p0# - fx - - - - DocumentFileName - Text - external - name of the embedded XML invoice file - - - DocumentType - Text - external - INVOICE - - - Version - Text - external - The actual version of the ZUGFeRD XML schema - - - ConformanceLevel - Text - external - The conformance level of the embedded ZUGFeRD data - - - - - - - - diff --git a/drafthorse/schema/ZUGFeRD2p2_extension_schema_EXTENDED.xmp b/drafthorse/schema/ZUGFeRD2p2_extension_schema_EXTENDED.xmp deleted file mode 100644 index 8b00366..0000000 --- a/drafthorse/schema/ZUGFeRD2p2_extension_schema_EXTENDED.xmp +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - EXTENDED - EXTENDED.xml - INVOICE - 1.0 - - - - - - - - - ZUGFeRD PDFA Extension Schema - urn:ferd:pdfa:CrossIndustryDocument:invoice:1p0# - fx - - - - DocumentFileName - Text - external - name of the embedded XML invoice file - - - DocumentType - Text - external - INVOICE - - - Version - Text - external - The actual version of the ZUGFeRD XML schema - - - ConformanceLevel - Text - external - The conformance level of the embedded ZUGFeRD data - - - - - - - - diff --git a/drafthorse/schema/ZUGFeRD2p2_extension_schema_MINIMUM.xmp b/drafthorse/schema/ZUGFeRD2p2_extension_schema_MINIMUM.xmp deleted file mode 100644 index 1973af6..0000000 --- a/drafthorse/schema/ZUGFeRD2p2_extension_schema_MINIMUM.xmp +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - MINIMUM - MINIMUM.xml - INVOICE - 1.0 - - - - - - - - - ZUGFeRD PDFA Extension Schema - urn:ferd:pdfa:CrossIndustryDocument:invoice:1p0# - fx - - - - DocumentFileName - Text - external - name of the embedded XML invoice file - - - DocumentType - Text - external - INVOICE - - - Version - Text - external - The actual version of the ZUGFeRD XML schema - - - ConformanceLevel - Text - external - The conformance level of the embedded ZUGFeRD data - - - - - - - - -- 2.47.2