Technical note on Factur-X EN16931 compliance, PDF/A-3, XSD and Schematron, and the most common errors in e-invoicing solutions.
The e-invoicing reform sets strict deadlines. Many solutions claim to be Factur-X compliant. Few actually are.
Factur-X compliance is not just about embedding an XML file inside a PDF.
It relies on three distinct, independent, and all mandatory levels.
A Factur-X invoice is considered compliant only if it simultaneously satisfies these three requirements:
Most solutions only validate one or two of these levels. PDF/A-3 is consistently the most problematic part.
Generating a PDF and embedding an XML file into it does not produce a compliant PDF/A-3 document.
PDF/A-3 enforces strict constraints on the document itself: fully embedded fonts, declared color spaces, ICC OutputIntent present, compliant XMP metadata.
The most widely used PDF generation libraries, Dompdf and TCPDF, produce DeviceRGB without an ICC OutputIntent. The result is a PDF invalid under the PDF/A standard, even if the embedded XML is perfectly structured.
The Factur-X validator detects this immediately. The invoice is rejected.
The reference Factur-X validator performs three distinct passes:
A solution that passes XSD and Schematron but fails on PDF/A-3 is not Factur-X compliant. It produces a correct XML inside a non-archivable PDF.
PDF/A-3 compliance requires a PDF generation library capable of natively producing an archivable document.
mPDF generates clean PDF/A-1b output, with an integrated ICC OutputIntent, embedded fonts and compliant XMP metadata. The Python factur-x library then injects the EN16931 XML and converts the document to PDF/A-3.
The result passes all three validation levels: XSD, Schematron, PDF/A-3.
An existing invoicing solution can be made Factur-X compliant without a full rewrite.
The XML engine adapts to the existing data structure. The PDF/A-3 injection is added at the output of the current PDF generator. The existing system is not deeply modified.
What changes: the produced document is now valid, archivable, and interoperable with e-invoicing platforms.
The September 2026 deadline for B2B e-invoice reception leaves no room for partial solutions.