La forme d’une facture électronique UE, et pourquoi deux formats sont empilés
Une facture électronique UE moderne regroupe deux documents dans un seul fichier :
- Un PDF/A-3 lisible par un humain : numéro de facture, lignes, totaux, marque du fournisseur. La spécification PDF/A-3 (ISO 19005-3) est la seule variante PDF/A qui autorise des pièces jointes arbitraires dans l’enveloppe d’archivage.
- Une pièce jointe XML CII EN 16931 dans ce PDF : la même facture sous forme de données structurées, que l’automatisation comptabilité fournisseurs, les imports ERP et les systèmes d’autorités fiscales peuvent analyser sans OCR.
Factur-X (France) et ZUGFeRD (Allemagne) suivent la même idée, avec des libellés nationaux différents. Les deux attachent un XML Cross-Industry Invoice (CII) EN 16931 à une enveloppe PDF/A-3. ZUGFeRD est obligatoire pour la réception de factures B2B allemandes depuis 2025 ; Factur-X entre progressivement dans l’obligation d’émission B2B en France sur 2026-2027.
Si vous envoyez des factures à des clients français ou allemands en 2026, l’un de ces deux formats n’est plus optionnel.
Pourquoi le produire de zéro est pénible, et pourquoi gPdf en fait un point d’entrée
Assembler cela depuis zéro implique :
- Générer les octets PDF : composition, polices, mise en page.
- Générer séparément le XML CII, en respectant EN 16931.
- Définir correctement l’espace de noms XMP PDF/A-3 (
urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#pour Factur-X ; l’espace de noms ZUGFeRD 2.x diffère). - Intégrer le XML avec
AFRelationship="Alternative"conformément à la spécification. - Marquer correctement le fichier intégré dans le tableau
/AFde PDF/A-3. - Valider le résultat avec veraPDF (côté PDF/A) ET Mustang (côté XML CII) : les deux doivent passer.
Une équipe type se trompe deux fois avant que les deux moteurs valident. L’API gPdf ramène ces six étapes à un seul appel POST /api/v1/e-invoice/render. Vous fournissez :
settings.e_invoice.standard:factur_xouzugferdsettings.e_invoice.xml.content: votre XML CIIpages[]: la mise en page visible de la facture- le reste est émis automatiquement avec les bonnes métadonnées PDF/A-3.
Consultez le §5 de la référence E-Invoice API pour le schéma complet de requête, les modes de validation (basic vs strict) et le cycle de vie asynchrone des jobs en validation stricte.
Vérifier la sortie : le modèle de preuve d’audit
Un fournisseur qui dit “oui, notre PDF passe PDF/A-3” ne vaut rien si l’auditeur utilise les moteurs de référence. Le modèle adapté aux preuves d’audit est le suivant :
- Générez la facture électronique via
POST /api/v1/e-invoice/render. - Déposez le PDF obtenu dans le validator, qui exécute :
- veraPDF : l’implémentation de référence officielle maintenue par la PDF Association, pour la conformité PDF/A-3.
- Mustang : projet allemand open source (mustangproject.org) utilisé de facto comme vérificateur de référence Factur-X / ZUGFeRD ; il extrait le XML CII intégré, valide avec Schematron contre EN 16931 et remonte les résultats champ par champ.
- Les deux rapports reviennent côte à côte dans la même interface. Les deux doivent afficher “Pass” avant l’envoi en production vers l’automatisation comptabilité fournisseurs.
Ce modèle compte parce que :
- Un PDF qui passe veraPDF mais échoue Mustang signifie que l’enveloppe est conforme, mais que le XML interne est mal formé : le système de comptabilité fournisseurs rejette la facture à la réception.
- Un PDF qui passe Mustang mais échoue veraPDF signifie que le XML est correct, mais que l’enveloppe d’archivage ne satisfait pas PDF/A-3 : l’archivage long terme est rejeté.
- L’un ou l’autre échec casse le flux de bout en bout. Les deux doivent passer.
Le validateur est gratuit, sans connexion, et produit des rapports JSON que vous pouvez joindre à vos preuves QA. C’est le même modèle à deux moteurs que les grands cabinets d’audit utilisent en interne ; gPdf l’héberge simplement publiquement.
Au-delà de Factur-X / ZUGFeRD
Si vous travaillez aussi avec :
- FatturaPA (Italie, obligatoire depuis 2019) : déjà sur la feuille de route du validateur.
- Peppol BIS 3.0 UBL (Nordiques / Benelux / de plus en plus transfrontalier) : feuille de route.
- KSeF (Pologne, obligatoire en 2026) : feuille de route.
Le point d’entrée de facture électronique gPdf étendra sa couverture à mesure que chaque format passera de “phase initiale de feuille de route” à “disponible dans le validateur et le moteur de rendu”. La forme reste la même : une requête JSON, le bon espace de noms XMP et AFRelationship pris en charge en interne, puis les deux moteurs vérifient avant l’envoi.
TL;DR
- Un appel API → PDF/A-3 + XML CII EN 16931 intégré.
- Choisissez Factur-X ou ZUGFeRD via
settings.e_invoice.standard. - Vérifiez avec le validator : veraPDF + Mustang en parallèle, gratuitement.
- Les deux moteurs doivent passer. L’API gPdf est conçue pour cela ; le validateur en fournit le reçu public.