ZUGFeRD fix 3
This commit is contained in:
parent
d8e90b119e
commit
d1604b0388
61
main.py
61
main.py
|
|
@ -583,15 +583,72 @@ with col2:
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
# 🔥 FIX: mime-Parameter entfernt, da von PyMuPDF nicht unterstützt
|
|
||||||
original_pdf_bytes = uploaded_file.getvalue()
|
original_pdf_bytes = uploaded_file.getvalue()
|
||||||
doc = fitz.open(stream=original_pdf_bytes, filetype="pdf")
|
doc = fitz.open(stream=original_pdf_bytes, filetype="pdf")
|
||||||
|
|
||||||
|
# 🔥 OPTIMIERUNG 1: Setze das zwingend erforderliche PDF/A-3 Beziehungs-Flag 'Alternative'
|
||||||
doc.embfile_add(
|
doc.embfile_add(
|
||||||
"factur-x.xml",
|
"factur-x.xml",
|
||||||
xml_string.encode("utf-8"),
|
xml_string.encode("utf-8"),
|
||||||
filename="factur-x.xml",
|
filename="factur-x.xml",
|
||||||
desc="Factur-X/ZUGFeRD E-Invoice"
|
desc="Factur-X/ZUGFeRD E-Invoice",
|
||||||
|
relationship="Alternative"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# 🔥 OPTIMIERUNG 2: Injiziere das offizielle Factur-X / ZUGFeRD 2.x XMP-Schema in den PDF-Header
|
||||||
|
xmp_xml = """<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
|
||||||
|
<x:xmpmeta xmlns:x="adobe:ns:meta/">
|
||||||
|
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<rdf:Description rdf:about="" xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/" xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema/" xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#">
|
||||||
|
<pdfaExtension:schemas>
|
||||||
|
<rdf:Bag>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<pdfaSchema:schema>Factur-X PDFA Extension Schema</pdfaSchema:schema>
|
||||||
|
<pdfaSchema:prefix>fx</pdfaSchema:prefix>
|
||||||
|
<pdfaSchema:namespace>urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#</pdfaSchema:namespace>
|
||||||
|
<pdfaSchema:properties>
|
||||||
|
<rdf:Seq>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<pdfaProperty:name>DocumentType</pdfaProperty:name>
|
||||||
|
<pdfaProperty:valueType>Text</pdfaProperty:valueType>
|
||||||
|
<pdfaProperty:category>external</pdfaProperty:category>
|
||||||
|
<pdfaProperty:description>The type of the document, usually INVOICE</pdfaProperty:description>
|
||||||
|
</rdf:li>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<pdfaProperty:name>DocumentFileName</pdfaProperty:name>
|
||||||
|
<pdfaProperty:valueType>Text</pdfaProperty:valueType>
|
||||||
|
<pdfaProperty:category>external</pdfaProperty:category>
|
||||||
|
<pdfaProperty:description>The name of the embedded file</pdfaProperty:description>
|
||||||
|
</rdf:li>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<pdfaProperty:name>Version</pdfaProperty:name>
|
||||||
|
<pdfaProperty:valueType>Text</pdfaProperty:valueType>
|
||||||
|
<pdfaProperty:category>external</pdfaProperty:category>
|
||||||
|
<pdfaProperty:description>The version of the document type schema</pdfaProperty:description>
|
||||||
|
</rdf:li>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<pdfaProperty:name>ConformanceLevel</pdfaProperty:name>
|
||||||
|
<pdfaProperty:valueType>Text</pdfaProperty:valueType>
|
||||||
|
<pdfaProperty:category>external</pdfaProperty:category>
|
||||||
|
<pdfaProperty:description>The conformance level of the document</pdfaProperty:description>
|
||||||
|
</rdf:li>
|
||||||
|
</rdf:Seq>
|
||||||
|
</pdfaSchema:properties>
|
||||||
|
</rdf:li>
|
||||||
|
</rdf:Bag>
|
||||||
|
</pdfaExtension:schemas>
|
||||||
|
</rdf:Description>
|
||||||
|
<rdf:Description rdf:about="" xmlns:fx="urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#">
|
||||||
|
<fx:DocumentType>INVOICE</fx:DocumentType>
|
||||||
|
<fx:DocumentFileName>factur-x.xml</fx:DocumentFileName>
|
||||||
|
<fx:Version>1.0</fx:Version>
|
||||||
|
<fx:ConformanceLevel>XRECHNUNG</fx:ConformanceLevel>
|
||||||
|
</rdf:Description>
|
||||||
|
</rdf:RDF>
|
||||||
|
</x:xmpmeta>
|
||||||
|
<?xpacket end="w"?>"""
|
||||||
|
|
||||||
|
doc.set_xmp_metadata(xmp_xml)
|
||||||
zugferd_pdf_bytes = doc.tobytes()
|
zugferd_pdf_bytes = doc.tobytes()
|
||||||
doc.close()
|
doc.close()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue