So, mich hat das Thema PDF/A-3 und die Compound Documents doch nun etwas mehr interessiert. Aus diesem Grund habe ich mir die Sachlage in Bezug auf ZUGFeRD und XRechnung etwas genauer angeschaut.
Beide Varianten verfolgen ja prinzipiell den gleichen Ansatz verwenden aber unterschiedliche XML Namespaces. Aus diesem Grund habe ich mir zwei Beispiele generiert.
ZUGFeRD-invoice ist eine normale pdf-Datei mit dazugehöriger xml, die den ZUGFeRD Namespace verwendet.
R-2023-0001_2023-11-11 sind 3 Dateien (odt,pdf,xml), die mit Hilfe des LibreOffice DB Macros und einer Template-Datei erstellt worden sind.
Nun ging es darum die jeweilige pdf Datei zu einer PDF/A-3 Datei mit eingebetteter xml Datei mittels "gs" zu konvertieren.
Für PDF/A-3 war der Farbraum zu definieren. Dies habe ich mit der default "rgb.icc" von "gs" gemacht. Da kann man sich dann nach Belieben austoben.
Der eigentliche Gehirnschmalz steckt in "zugferd.ps", dessen Aufbau in dieser Webseite sehr übersichtlich und leicht verständlich beschrieben ist (Klasse!!!).
Ich habe daher noch das folgende Script erstellt, was die "Rechnungsnummer" ($1) auswertet und eine compound PDF/A-3 Datei erzeugt.
#!/bin/bash
# Beispiel für die erstellung eines compound pdf documents analog zu ZUGFeRD
#
# Als Beispiel wird die erzeugte Rechnung mit dem LibreOffice DB Makro (siehe:
# https://de.blog.documentfoundation.org/2024/02/22/
# mit-libreoffice-xrechnungen-auslesen-und-erstellen/ )
# verwendet. Dies sind die Dateien
# - R-2023-0001_2023-11-11.{odt,xml,pdf}
# - rgb.icc (siehe /usr/share/color/icc/ghostscript/default_rgb.icc)
# - zugferd.ps (siehe https://git.ghostscript.com/
# ?p=ghostpdl.git;a=blob_plain;f=lib/zugferd.ps)
#
# $1 = Rechnungsnummer (default: R-2023-0001_2023-11-11)
#
zugferd=$HOME/Downloads/x/tst # Anpassen !!!
rnr=${1:-R-2023-0001_2023-11-11}
gs --permit-file-read=$zugferd/ \
-sDEVICE=pdfwrite \
-dPDFA=3 \
-sColorConversionStrategy=RGB \
-sZUGFeRDXMLFile=$zugferd/$rnr.xml \
-sZUGFeRDProfile=$zugferd/rgb.icc \
-sZUGFeRDVersion=2p1 \
-sZUGFeRDConformanceLevel=BASIC \
-o $zugferd/$rnr.zugferd.pdf \
$zugferd/zugferd.ps \
$zugferd/$rnr.pdf
Die erzeugte "$rnr.zugferd.pdf" kann man sich mit einem geeignetes PDF-Viewer (z.B. firefox oder Acrobat-Reader) anschauen und sich den "Anhang" (die xml-Datei) anzeigen lassen. Ich habe mir hierfür einen kleinen Launcher (Quba-Viewer) erstellt, damit dies auch einfach mit Mausklick im Datei-Explorer (hier: thunar) gemacht werden kann.
Der Quba-Viewer zeigt in einem geteilten Fenster links die pdf und rechts die xml Information an. Ein Beispiel mit dem einfachen Acrobat-Reader und Quba ist als Screenshot beigefügt.
Wie in der "zugferd.ps" beschrieben, wird in der pdf Datei der xml Anhang als "factur-x.xml" eingetragen (wegen der 2p1 Version). Das kann man aber nach Belieben anpassen.
Zum Nachspielen habe ich die erforderlichen "Testfiles" in einer zip Datei beigefügt.
Der Aufruf für die ZUGFeRD Variante wäre
$ . gs-zugferd.sh ZUGFeRD-invoice
und der Aufruf für die Variante "XRechnung" wäre
$ . gs-zugferd.sh R-2023-0001_2023-11-11