Die Form einer EU-E-Rechnung und warum zwei Formate übereinanderliegen
Eine moderne EU-E-Rechnung besteht aus zwei Dokumenten in einer Datei:
- Einem PDF/A-3, das Menschen lesen können: Rechnungsnummer, Positionen, Summen, Lieferantenbranding. Die PDF/A-3-Spezifikation (ISO 19005-3) ist die einzige PDF/A-Variante, die beliebige Dateianhänge innerhalb der Archivhülle erlaubt.
- Einem EN 16931 CII XML-Anhang innerhalb dieses PDFs: dieselbe Rechnung als strukturierte Daten, die AP-Automation, ERP-Importe und Systeme von Steuerbehörden ohne OCR parsen können.
Factur-X (Frankreich) und ZUGFeRD (Deutschland) sind dieselbe Idee unter unterschiedlichen nationalen Bezeichnungen. Beide hängen ein EN 16931 Cross-Industry Invoice (CII) XML an eine PDF/A-3-Hülle. ZUGFeRD ist seit 2025 für den Empfang deutscher B2B-Rechnungen verpflichtend; Factur-X wird in Frankreich 2026-2027 schrittweise für die B2B-Ausstellung verpflichtend.
Wenn Sie 2026 Rechnungen an französische oder deutsche Kunden senden, ist eines dieser beiden Formate nicht mehr optional.
Warum die Generierung von Grund auf mühsam ist und warum gPdf daraus einen Endpoint macht
Das von Grund auf zusammenzusetzen bedeutet:
- PDF-Bytes erzeugen: Satz, Fonts, Layout.
- Das CII XML separat erzeugen und auf EN 16931 abstimmen.
- Den PDF/A-3-XMP-Namespace korrekt setzen (
urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#für Factur-X; der ZUGFeRD-2.x-Namespace unterscheidet sich). - Das XML gemäß Spezifikation mit
AFRelationship="Alternative"einbetten. - Die eingebettete Datei im
/AF-Array von PDF/A-3 korrekt markieren. - Das Ergebnis mit veraPDF (PDF/A-Ebene) UND Mustang (CII-XML-Ebene) validieren. Beide müssen bestehen.
Ein typisches Team macht das zweimal falsch, bevor beide Engines bestehen. Die gPdf API reduziert alle sechs Schritte auf einen einzigen Aufruf von POST /api/v1/e-invoice/render. Sie liefern:
settings.e_invoice.standard:factur_xoderzugferdsettings.e_invoice.xml.content: Ihr CII XMLpages[]: das sichtbare Rechnungslayout- alles andere wird automatisch mit den korrekten PDF/A-3-Metadaten erzeugt.
Siehe §5 der E-Invoice API Referenz für das vollständige Request-Schema, Validierungsmodi (basic versus strict) und den asynchronen Job-Lifecycle für Strict-Validation-Läufe.
Ausgabe prüfen: das Audit-Muster
Die Aussage eines Anbieters “ja, unser PDF besteht PDF/A-3” ist wenig wert, wenn der Auditor die Referenz-Engines verwendet. Das audit-taugliche Muster ist:
- Generieren Sie die E-Rechnung über
POST /api/v1/e-invoice/render. - Laden Sie das resultierende PDF in den validator. Er führt aus:
- veraPDF: die offizielle Referenzimplementierung der PDF Association für PDF/A-3-Konformität.
- Mustang: ein deutsches Open-Source-Projekt (mustangproject.org), das de facto als Referenzchecker für Factur-X / ZUGFeRD dient. Es extrahiert das eingebettete CII XML, validiert gegen EN 16931 Schematron und berichtet feldweise.
- Beide Berichte erscheinen nebeneinander in derselben UI. Beide müssen “Pass” zeigen, bevor Sie die Rechnung in produktive AP-Automation schicken.
Dieses Muster ist wichtig, weil:
- Ein PDF, das veraPDF besteht, aber Mustang nicht besteht, eine konforme Hülle hat, aber fehlerhaftes XML enthält. Das AP-System weist die Rechnung beim Empfang zurück.
- Ein PDF, das Mustang besteht, aber veraPDF nicht besteht, hat korrektes XML, erfüllt aber nicht die PDF/A-3-Anforderungen an die Archivhülle. Die Langzeitarchivierung weist es zurück.
- Jeder der beiden Fehler bricht den End-to-End-Fluss. Beide müssen bestehen.
Der Validator ist kostenlos, erfordert kein Login und erzeugt JSON-Reports, die Sie Ihren QA-Nachweisen beilegen können. Es ist dasselbe Zwei-Engine-Muster, das Big-Four-Prüfungsgesellschaften intern verwenden. gPdf stellt es nur öffentlich bereit.
Über Factur-X / ZUGFeRD hinaus
Wenn Sie auch mit Folgendem arbeiten:
- FatturaPA (Italien, seit 2019 verpflichtend): bereits auf der Validator-Roadmap.
- Peppol BIS 3.0 UBL (Nordics / Benelux / zunehmend grenzüberschreitend): Roadmap.
- KSeF (Polen, verpflichtend 2026): Roadmap.
Der E-Rechnungs-Endpoint von gPdf erweitert die Abdeckung, sobald jedes Format von “frühe Roadmap” zu “live im Validator und Renderer” übergeht. Die Form bleibt gleich: ein JSON-Request, der richtige XMP-Namespace und AFRelationship intern erledigt, beide Engines prüfen vor dem Versand.
TL;DR
- Ein API-Aufruf → PDF/A-3 + eingebettetes EN 16931 CII XML.
- Wählen Sie Factur-X oder ZUGFeRD über
settings.e_invoice.standard. - Prüfen Sie mit dem validator: veraPDF + Mustang parallel, kostenlos.
- Beide Engines müssen bestehen. Die gPdf API ist dafür gebaut; der Validator ist der öffentliche Beleg.