Documentation

Documentation et premiers pas

Comment intégrer Validator, Creator et Reader dans votre propre application .NET – du package NuGet au premier appel fonctionnel, jusqu’aux valeurs de retour et à la gestion des erreurs.

Version couverte : Factur-X 1.09.2 / ZUGFeRD 2.5.2
  • .NET Framework 4.8
  • .NET 8
  • .NET 10
  • ZUGFeRD 2.5.2 / Factur-X 1.09.2
  • XRechnung 3.0 (CII & UBL)

Démarrage rapide

Du PDF au verdict de conformité en trois étapes. L’exemple ci-dessous reprend le déroulement réel utilisé par la démo en ligne.

  1. Ajouter le package Facturexa.ZugferdValidator via NuGet. Les référentiels officiels (schéma XML et Schematron) sont fournis et trouvés automatiquement.
  2. Enregistrer la clé de licence une fois au démarrage de l’application. Vous la recevez par e-mail et la retrouvez à tout moment dans votre compte client.
  3. Pour chaque facture, valider le PDF (ou le XML) en un seul appel.
C#
using Facturexa.ZugferdValidator;

// Une fois au démarrage : enregistrer la clé de licence.
ZugferdValidatorLicense.RegisterLicense("…");

// Valider la facture PDF : enveloppe PDF, schéma XML et Schematron officiel en un seul appel.
var result = ZugferdValidator.Validate("facture.pdf", "FA-2026-0001");

Console.WriteLine(result.IsValid ? "Valide" : "Non conforme");

Le déroulement complet avec gestion des erreurs figure dans la section Validator.

Installation et prérequis

Chaque bibliothèque est un package NuGet autonome et peut être intégrée séparément.

Facturexa.ZugferdValidator
dotnet add package Facturexa.ZugferdValidator
Install-Package Facturexa.ZugferdValidator
Facturexa.ZugferdCreator
dotnet add package Facturexa.ZugferdCreator
Install-Package Facturexa.ZugferdCreator
Facturexa.ZugferdReader
dotnet add package Facturexa.ZugferdReader
Install-Package Facturexa.ZugferdReader
🖥️

Prérequis

  • .NET 10, .NET 8 ou .NET Framework 4.8
  • Windows, Linux ou macOS
  • Validator : dossier Official Schematron\ à côté de l’application (copié automatiquement par le package)
  • Validator : pas de trimming (PublishTrimmed) ni de Native AOT
📦

Disponible sur NuGet

Pour les tarifs et les clés de licence, voir Licence ou Contact.

🧪

Essayer sans code

La démo en ligne montre le Validator directement dans le navigateur, sans aucune intégration dans votre code.

Déploiement des référentiels (Validator)

  • Fonctionnement hors ligne : tous les référentiels (schéma XML, Schematron, listes de codes) sont inclus dans le package. Aucune connexion Internet n’est nécessaire à l’exécution et le Validator n’appelle aucun service externe – la vérification de licence est également locale. Aucune règle de pare-feu n’est requise.
  • Le package copie automatiquement Official Schematron\ (les règles Schematron et, sous XSD\, le schéma XML) à côté de votre application lors de la compilation et de la publication – y compris pour ASP.NET classique (sous bin\), le fichier unique (single-file), ClickOnce et lorsque vous intégrez le Validator via votre propre bibliothèque ou votre propre package NuGet.
  • Après une rétrogradation du package, nettoyer ou régénérer une fois la solution afin que les fichiers de référentiel plus anciens remplacent les plus récents dans le dossier de sortie.
  • Fournir le dossier vous-même : définir <FacturexaContentAutoCopy>false</FacturexaContentAutoCopy> dans le projet, avec PackageReference ajouter ExcludeAssets="contentFiles" à la référence du package, et définir SchematronChecker.SchematronDirectory sur ce dossier.

Profils et versions

Factur-X/ZUGFeRD définit plusieurs profils avec des niveaux de détail différents. Le tableau ci-dessous indique ceux que le Validator contrôle et que le Creator génère.

Profil Description Validator Creator
MINIMUM Données d’en-tête, pas un format de facture électronique valable à lui seul ✔ Oui ✔ Oui
BASIC WL Données d’en-tête sans lignes de facture ✔ Oui ✔ Oui
BASIC Informations essentielles, lignes de facture comprises ✔ Oui ✔ Oui
EN 16931 / COMFORT Norme européenne de base – format de facture électronique valable ✔ Oui ✔ Oui
EXTENDED Jeu de données étendu ; à partir de Factur-X 1.09.2 / ZUGFeRD 2.5.2 avec sous-lignes, kits et lots ✔ Oui ✔ Oui
XRechnung 3.0 (CIUS) Variante allemande B2G (secteur public), en deux étapes EN 16931 + CIUS ✔ Oui (CII + UBL) ✔ Oui (CII)
Génération UBL Produire la XRechnung en UBL plutôt qu’en CII n/a (la validation est déjà assurée) Prévu

Version

Le Creator écrit toujours selon la spécification en vigueur : Factur-X 1.09.2 / ZUGFeRD 2.5.2 (applicable à partir du 1er septembre 2026), y compris les sous-lignes EXTENDED pour les kits et les lots. Vous ne choisissez pas de version dans Save(…) – les nouvelles spécifications arrivent avec une nouvelle version du package.

La spécification implémentée par la DLL intégrée peut être interrogée à l’exécution : ZugferdCreatorInfo.SupportedSpecification.

Validator : valider un PDF

Enregistrez la clé de licence une fois au démarrage de l’application. Le Validator trouve automatiquement les référentiels officiels à côté de la DLL (sous bin\ pour ASP.NET classique) ; ensuite, un appel par validation suffit. Passez le PDF complet : le Validator extrait lui-même le XML embarqué, contrôle l’enveloppe PDF (PDF/A-3, métadonnées Factur-X), puis valide le XML selon le schéma XML et le Schematron officiel. Un fichier XML seul fonctionne de la même façon – la détection se fait sur le contenu, pas sur l’extension. IsValid est vrai si aucune étape ne signale d’erreur ; IsPdfValid et IsSchemaValid donnent les verdicts partiels.

C#
using Facturexa.ZugferdValidator;

// Une fois au démarrage de l’application.
ZugferdValidatorLicense.RegisterLicense("…");

// PDF ou XML : enveloppe PDF, schéma XML et Schematron officiel en un seul appel.
var result = ZugferdValidator.Validate("facture.pdf", "FA-2026-0001");

Console.WriteLine(result.IsValid ? "Valide" : "Non conforme");
Console.WriteLine($"Enveloppe PDF : {result.IsPdfValid}"); // null pour un XML seul
Console.WriteLine($"Référentiel : {result.SchematronRuleSet}");

foreach (var error in result.Errors)
    Console.WriteLine($"{error.Stage}: {error}"); // p. ex. "Schematron: BR-CO-15 (BT-112): ..."

Pour aller plus loin : page produit Validator · essayer la démo

Creator : créer une facture

Enregistrer la clé de licence une fois au démarrage, puis renseigner l’en-tête, les parties, les lignes et les totaux, choisir un profil et enregistrer. La sortie est actuellement en CII (UBL est prévu).

C#
using Facturexa.ZugferdCreator;

// Une fois au démarrage de l’application.
ZugferdCreatorLicense.RegisterLicense("…");

var invoice = new EInvoice
{
    InvoiceNumber = "FA-2026-0001",
    InvoiceDate = DateTime.Today
};

invoice.SetSellerTradeParty("Exemple SAS", "75001", "Paris", "1 rue de l’Exemple", CountryID.FR);
invoice.AddSellerSpecifiedTaxRegistration("FR12345678901", TaxRegistrationSchemeID.VA);
invoice.SetBuyerTradeParty("Client SARL", "69002", "Lyon", "2 place du Client", CountryID.FR);

invoice.AddIncludedSupplyChainTradeLineItem(
    name: "Prestation de conseil", netUnitPrice: 100.00m, unitCode: UnitCode.C62,
    billedQuantity: 3m, lineTotalAmount: 300.00m, taxPercent: 20m);

invoice.AddApplicableTradeTax(300.00m, 20m, 60.00m, TaxTypeCode.VAT, TaxCategoryCode.S);

invoice.LineTotalAmount = 300.00m;
invoice.TaxBasisAmount = 300.00m;
invoice.TaxTotalAmount = 60.00m;
invoice.GrandTotalAmount = 360.00m;
invoice.DuePayableAmount = 360.00m;

using var xmlStream = new MemoryStream();
invoice.Save(xmlStream, InvoiceProfile.Comfort);

Pour aller plus loin : page produit Creator · essayer la démo

Reader : lire une facture

Le Reader lit une facture – XML seul (CII ou UBL) ou PDF avec XML embarqué ; le format est détecté automatiquement – et renvoie les champs sous forme d’objet. Il peut aussi en générer une vue PDF lisible.

C#
using Facturexa.ZugferdReader;

// Lire un PDF ou un XML – le nom de fichier aide à détecter le format.
using var stream = File.OpenRead("facture.pdf");
var invoice = ZugferdReader.Read(stream, "facture.pdf");

Console.WriteLine(invoice.InvoiceNumber);
Console.WriteLine(invoice.InvoiceDate?.ToString("dd/MM/yyyy"));
Console.WriteLine(invoice.Seller?.Name);
Console.WriteLine($"{invoice.LineItems.Count} ligne(s), {invoice.GrandTotalAmount:N2} {invoice.CurrencyCode}");

// Facultatif : générer une vue PDF lisible de la facture.
byte[] viewPdf = ZugferdReader.CreatePdf(invoice);
File.WriteAllBytes("facture-vue.pdf", viewPdf);

Pour aller plus loin : page produit Reader · essayer la démo

Valeurs de retour

Les principaux champs des objets résultat en un coup d’œil.

ZugferdValidationResult – Validator.Validate(…)

MembreTypeSignification
IsValidboolVrai si aucune étape ne signale d’erreur (enveloppe PDF, schéma XML, Schematron officiel) et si le contrôle PDF n’a pas échoué.
IsPdfValidbool?Verdict du contrôle PDF ; null si un XML a été validé au lieu d’un PDF.
IsSchemaValidboolVrai si le schéma XML (XSD) ne signale aucune erreur.
PdfCheckZugferdPdfCheckResultRésultat du contrôle PDF avec ses lignes d’état (voir ci-dessous) ; null pour un XML seul.
PdfFindings / SchemaFindings / SchematronFindingsList<ValidationFinding>Constats d’une étape de contrôle ; chaque constat indique son étape dans Stage.
EmbeddedXml / EmbeddedXmlFileNamebyte[] / stringLe XML validé et, pour un PDF, le nom de la pièce jointe, p. ex. « factur-x.xml » – par exemple pour le transmettre au Reader.
ErrorsList<ValidationFinding>Constats bloquants (gravité Error).
WarningsList<ValidationFinding>Avertissements ; n’empêchent pas l’envoi.
FindingsList<ValidationFinding>Tous les constats, non filtrés.
SchematronRuleSetstringRéférentiel officiel appliqué, p. ex. « ZUGFeRD 2.5.2 / Factur-X 1.09.2, profile EXTENDED – release date 2026-08-04 (FACTUR-X_EXTENDED.xslt) ». Null si le profil n’est pas couvert ou si le Schematron n’a pas pu s’exécuter.
ProfileInfoInvoiceProfileInfoVersion/profil déclarés par le document lui-même (BT-24).
GetErrorMessages()List<string>Erreurs sous forme de messages prêts à l’emploi, numéro de facture compris.

ZugferdPdfCheckResult – ZugferdValidationResult.PdfCheck

MembreTypeSignification
OverallValidboolVerdict global du contrôle PDF (identique à IsPdfValid).
FormatstringIdentification PDF/A issue des métadonnées XMP, p. ex. « PDFA_3_B », sinon « unknown ».
FacturXVersionstringVersion Factur-X issue des métadonnées XMP, p. ex. « 1.0 ».
XmlExtractable / EmbeddingCompliant / FileNameCompliant / XmpCompliantZugferdPdfCheckStatusLignes d’état : Yes, No ou Unknown.
FindingsList<ValidationFinding>Constats du contrôle PDF (PDF-CHECK-01 à -16, PDF-XML-MISSING).

API précédente : ZugferdPdfReader.ReadZugferdXml(…) et ZugferdPdfValidator.Validate(…) continuent de fonctionner jusqu’à la version 8.0, mais sont marquées obsolètes depuis la 7.4.0. Passez plutôt le PDF directement à ZugferdValidator.Validate(…).

InvoiceViewModel – ZugferdReader.Read(…)

MembreTypeSignification
InvoiceNumberstringNuméro de facture (BT-1).
InvoiceDateDateTime?Date de facture (BT-2).
Seller / BuyerInvoicePartyViewModelVendeur/acheteur avec .Name et adresse.
LineItemsList<…>Lignes de facture.
GrandTotalAmountdecimal?Montant total TTC (BT-112).
CurrencyCodestringDevise (BT-5), p. ex. « EUR ».
ProfileUrnstringURN du profil issue du CustomizationID.

Gestion des erreurs et dépannage

Les pièges les plus fréquents lors de l’intégration et leur cause. Les messages des bibliothèques sont en anglais et cités tels quels.

SymptômeCause et solution
ZugferdValidatorLicenseException ou ZugferdCreatorLicenseException : « No license key found » La clé n’a pas été enregistrée. Appeler ZugferdValidatorLicense.RegisterLicense("…") ou ZugferdCreatorLicense.RegisterLicense("…") une fois au démarrage, avant la première validation ou création.
Constat XSD-ERROR : la validation selon le schéma XML n’a pas pu être effectuée Les fichiers XSD (Official Schematron\XSD\) n’ont pas été déployés ou le dossier ne se trouve pas à côté de la DLL. Déployer l’intégralité du dossier Official Schematron\ ou définir une fois SchematronChecker.SchematronDirectory sur son chemin. Un contrôle impossible à effectuer est volontairement signalé comme erreur.
Constat PDF-XML-MISSING, message « The PDF file contains no attachments » Le PDF ne contient aucun XML embarqué – ce n’est pas une facture Factur-X/ZUGFeRD. Utiliser un vrai PDF Factur-X/ZUGFeRD ou valider directement le XML.
IsValid == false alors que la facture semble valide ; l’erreur mentionne Saxon/Schematron La DLL Saxon ou les artefacts Schematron n’ont pas été déployés. Un contrôle impossible à effectuer est volontairement signalé comme erreur. Déployer les artefacts.
Après publication avec PublishTrimmed : constat SCHEMATRON-ERROR, le message mentionne DotNetLocaleHelper Le moteur Saxon ne supporte ni le trimming ni Native AOT. Publier sans PublishTrimmed.
ZugferdReaderException / UnsupportedFormatException Le fichier n’est ni un PDF avec XML embarqué ni un XML en syntaxe CII ou UBL. Utiliser un format pris en charge ; encapsuler l’appel à ZugferdReader.Read(…) dans un try/catch.

Étapes suivantes

🔍

Validator

Valider les factures électroniques reçues.

Page produit · Démo
🧾

Creator

Créer des factures conformes.

Page produit · Démo
📖

Reader

Lire et afficher des factures.

Page produit · Démo
Il vous manque une référence d’API, un exemple pour un cas particulier (p. ex. kits/lots, remises, documents de référence) ou un dépôt d’exemples ? Faites-le-nous savoir – cela nous aide à compléter la documentation là où c’est utile.