From 7cccb4d8c6307feb70b5a5afcfdf4b1d25f6419f Mon Sep 17 00:00:00 2001 From: zakhodyaeva Date: Tue, 3 Feb 2026 02:32:05 +0400 Subject: [PATCH 1/5] update readme --- Images/screenshot.png | Bin 34320 -> 0 bytes Readme.md | 203 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 196 insertions(+), 7 deletions(-) delete mode 100644 Images/screenshot.png diff --git a/Images/screenshot.png b/Images/screenshot.png deleted file mode 100644 index 99c5782301f29f3ed9b1277ebeeb4d078b075c7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34320 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 Gum1ytzjy-x diff --git a/Readme.md b/Readme.md index 1255824..8bc9869 100644 --- a/Readme.md +++ b/Readme.md @@ -3,14 +3,203 @@ [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) [![](https://img.shields.io/badge/💬_Leave_Feedback-feecdd?style=flat-square)](#does-this-example-address-your-development-requirementsobjectives) -# Reporting for WinForms - Export a Report to ZUGFeRD +# Reports for WinForms - Export a Report to ZUGFeRD (XRechnung and Factur-X) + +This example exports a DevExpress report to a PDF/A-3b (ISO 19005-3) document and embeds an electronic invoice (e-invoice) XML file. The the resulting PDF complies with ZUGFeRD requirements and can be validated as one of the following formats: + +- German e-invoice: XRechnung (ZUGFeRD container) +- French e-invoice: Factur-X (ZUGFeRD container) + +## Implementation Details + +The project includes standards-compliant sample XML files and XMP metadata for German (XRechnung) and French (Factur-X) e-invoice formats. Although both formats rely on the ZUGFeRD container, each country requires specific configuration settings (such as the PDF attachment relationship, the embedded XML file name, and required XMP metadata fields). + +See the following specification for additional information about ZUGFeRD standarts: [What is ZUGFeRD / Factur-X?](https://www.ferd-net.de/en/standards/zugferd/factur-x) + +### Export to ZUGFeRD (Germany) + +When you click the "German Specific" button, the application does the following: + +• Loads two metadata fragments and concatenates them into `AdditionalMetadata`. +• Sets **PDF/A-3b** compliance. +• Attaches the `xrechnung.xml` file with the `Alternative` relationship. +• Exports the report to PDF and opens the resulting PDF. + +```cs +using System; +using System.Diagnostics; +using System.IO; +using DevExpress.XtraPrinting; + +void ButtonExportGermany_Click(object sender, EventArgs e) { + // Create a report instance for PDF export. + using (var report = new XtraReport1()) + { + report.XmlDataPath = "German//xrechnung.xml"; + + // Load ZUGFeRD XMP metadata fragments and concatenate them + // into a single AdditionalMetadata block. + string additionalMetadata = + File.ReadAllText("German//ZUGFeRD_DocumentInfo.txt") + + File.ReadAllText("German//ZUGFeRD_PdfASchema.txt"); + + // Configure PDF export options: + // - Enable PDF/A-3b compliance + // - Inject ZUGFeRD-required XMP metadata + var options = new PdfExportOptions { + PdfACompatibility = PdfACompatibility.PdfA3b, + AdditionalMetadata = additionalMetadata + }; + + // Attach 'xrechnung.xml' to the PDF and mark it + // as an Alternative representation. + options.Attachments.Add(new PdfAttachment { + FilePath = "German//xrechnung.xml", + Type = "text/xml", + Relationship = PdfAttachmentRelationship.Alternative, + Description = "Rechnungsdaten im ZUGFeRD-XML-Format", + }); + + // Export the report to a ZUGFeRD-compliant PDF file. + report.ExportToPdf("germanResult.pdf", options); + + // Open the resulting PDF document. + Process.Start("germanResult.pdf"); + } +} +``` + +#### XRechnung Resources (XML + XMP Metadata) + +- [xrechnung.xml](./CS/ZUGFeRD_sample/German/xrechnung.xml) + + UN/CEFACT Cross Industry Invoice payload compliant with the German XRechnung profile. The report uses this file as its data source. + +- [ZUGFeRD_DocumentInfo.txt](./CS/ZUGFeRD_sample/German/ZUGFeRD_DocumentInfo.txt) + + XMP RDF fragment that contains ZUGFeRD/XRechnung metadata for the PDF document. + +- [ZUGFeRD_PdfASchema.txt](./CS/ZUGFeRD_sample/German/ZUGFeRD_PdfASchema.txt) + + XMP PDF/A extension schema that defines the `fx` namespace and its properties. The schema ensures that PDF/A validation correctly interprets `fx:*` fields defined in _ZUGFeRD_DocumentInfo.txt_. + +#### Supported Standards (German Invoices) + +- The embedded XML file relationship must be set to `ALTERNATIVE`. +- The embedded XML file name must be `xrechnung.xml`. +- The XMP `fx:Version` value must match the currently valid XRechnung version (this example uses `3.0`, valid as 2026-01-08). +- The XMP `fx:ConformanceLevel` value must be set to `XRECHNUNG`. + +#### German Extension Schema (XRechnung): + +```xml + + INVOICE + xrechnung.xml + 3.0 + XRECHNUNG + +``` + +### Export to ZUGFeRD (France) + +When you click the "French Specific" button, the application does the following: + +• Loads two metadata fragments and concatenates them into `AdditionalMetadata`. +• Sets PDF/A-3b compliance. +• Attaches the `factur-x.xml` file with the `Data` relationship (Factur-X 1.0x spec). +• Exports the report and opens the resulting PDF. + +```cs +using System; +using System.Diagnostics; +using System.IO; +using DevExpress.XtraPrinting; + +void ButtonExportFrance_Click(object sender, EventArgs e) { + // Create a report. + using (var report = new XtraReport1()) + { + // Specify the Factur-X XML data source. + report.XmlDataPath = "French//factur-x.xml"; + + // Load ZUGFeRD XMP metadata fragments and concatenate them + // into a single AdditionalMetadata block. + string additionalMetadata = + File.ReadAllText("French//ZUGFeRD_DocumentInfo.txt") + + File.ReadAllText("French//ZUGFeRD_PdfASchema.txt"); + + // Configure PDF export options: + // - Enable PDF/A-3b compliance + // - Inject ZUGFeRD/Factur-X XMP metadata + var options = new PdfExportOptions { + PdfACompatibility = PdfACompatibility.PdfA3b, + AdditionalMetadata = additionalMetadata + }; + + // Attach the Factur-X XML file to the PDF. + // Use the Data relationship. + options.Attachments.Add(new PdfAttachment { + FilePath = "French//factur-x.xml", + Type = "text/xml", + Relationship = PdfAttachmentRelationship.Data, + Description = "Facture XML conforme Factur-X", + }); + + // Export the report to a Factur-X–compliant PDF file. + report.ExportToPdf("frenchResult.pdf", options); + + // Open the resulting PDF document. + Process.Start("frenchResult.pdf"); + } +} +``` + +#### Factur‑X Resources (XML + XMP Metadata) + +File to Review: + +- [factur-x.xml](./CS/ZUGFeRD_sample/French/factur-x.xml) + + Factur-X (EN 16931) invoice payload (UN/CEFACT Cross Industry Invoice). The report uses this file as its data source. + +- [ZUGFeRD_DocumentInfo.txt](./CS/ZUGFeRD_sample/French/ZUGFeRD_DocumentInfo.txt) + + XMP RDF fragment that contains Factur-X-specific metadata for the PDF document. + +- [ZUGFeRD_PdfASchema.txt](./CS/ZUGFeRD_sample/French/ZUGFeRD_PdfASchema.txt) + + PDF/A extension schema used by Factur-X in XMP. The schema ensures that PDF/A validation correctly interprets `fx:*` fields defined in _ZUGFeRD_DocumentInfo.txt_. + +#### Supported Standards (French Invoices) + +- The embedded XML file relationship must be set to `DATA`. +- The embedded XML file name must be `factur-x.xml`. +- The XMP `fx:Version` value must be `1.0`. +- The XMP `fx:ConformanceLevel` value must be set to `BASIC` (or another Factur-X profile based on your preferences). + +#### French Extension Schema (Factur-X) + +```xml + + INVOICE + factur-x.xml + 1.0 + BASIC + +``` -This example demonstrates how to export a simple report to a PDF/A-3b (ISO 19005-3) file that conforms to the [ZUGFeRD](https://www.ferd-net.de/standards/zugferd) specification used for electronic invoices in Germany. -![ZUGFeRD report exported to PDF in Acrobat Reader](Images/screenshot.png) ## Files to Review * [Form1.cs](./CS/ZUGFeRD_sample/Form1.cs) (VB: [Form1.vb](./VB/ZUGFeRD_sample/Form1.vb)) +- [factur-x.xml](./CS/ZUGFeRD_sample/French/factur-x.xml) (VB: [factur-x.xml](./VB/ZUGFeRD_sample/French/factur-x.xml)) +- [ZUGFeRD_DocumentInfo.txt](./CS/ZUGFeRD_sample/French/ZUGFeRD_DocumentInfo.txt) (VB: [ZUGFeRD_DocumentInfo.txt](./VB/ZUGFeRD_sample/French/ZUGFeRD_DocumentInfo.txt)) +- [ZUGFeRD_PdfASchema.txt](./CS/ZUGFeRD_sample/French/ZUGFeRD_PdfASchema.txt) (VB: [ZUGFeRD_PdfASchema.txt](./VB/ZUGFeRD_sample/French/ZUGFeRD_PdfASchema.txt)) +- [xrechnung.xml](./CS/ZUGFeRD_sample/German/xrechnung.xml) (VB:[xrechnung.xml](./VB/ZUGFeRD_sample/German/xrechnung.xml)) +- [ZUGFeRD_DocumentInfo.txt](./CS/ZUGFeRD_sample/German/ZUGFeRD_DocumentInfo.txt) (VB:[ZUGFeRD_DocumentInfo.txt](./VB/ZUGFeRD_sample/German/ZUGFeRD_DocumentInfo.txt) ) +- [ZUGFeRD_PdfASchema.txt](./CS/ZUGFeRD_sample/German/ZUGFeRD_PdfASchema.txt) (VB:[ZUGFeRD_PdfASchema.txt](./VB/ZUGFeRD_sample/German/ZUGFeRD_PdfASchema.txt)) + ## Documentation @@ -29,9 +218,9 @@ This example demonstrates how to export a simple report to a PDF/A-3b -## Does this example address your development requirements/objectives? - -[](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=reporting-winforms-export-pdf-zugferd&~~~was_helpful=yes) [](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=reporting-winforms-export-pdf-zugferd&~~~was_helpful=no) - +## Does this example address your development requirements/objectives? + +[](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=reporting-winforms-export-pdf-zugferd&~~~was_helpful=yes) [](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=reporting-winforms-export-pdf-zugferd&~~~was_helpful=no) + (you will be redirected to DevExpress.com to submit your response) From b16e5b8c3c9b4ca63719361a75b6cbd959ded776 Mon Sep 17 00:00:00 2001 From: ritazakhodyaeva <57389482+ritazakhodyaeva@users.noreply.github.com> Date: Tue, 3 Feb 2026 02:34:10 +0400 Subject: [PATCH 2/5] Update Readme.md --- Readme.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Readme.md b/Readme.md index 8bc9869..a7848ba 100644 --- a/Readme.md +++ b/Readme.md @@ -20,10 +20,10 @@ See the following specification for additional information about ZUGFeRD standar When you click the "German Specific" button, the application does the following: -• Loads two metadata fragments and concatenates them into `AdditionalMetadata`. -• Sets **PDF/A-3b** compliance. -• Attaches the `xrechnung.xml` file with the `Alternative` relationship. -• Exports the report to PDF and opens the resulting PDF. +- Loads two metadata fragments and concatenates them into `AdditionalMetadata`. +- Sets **PDF/A-3b** compliance. +- Attaches the `xrechnung.xml` file with the `Alternative` relationship. +- Exports the report to PDF and opens the resulting PDF. ```cs using System; @@ -105,10 +105,10 @@ void ButtonExportGermany_Click(object sender, EventArgs e) { When you click the "French Specific" button, the application does the following: -• Loads two metadata fragments and concatenates them into `AdditionalMetadata`. -• Sets PDF/A-3b compliance. -• Attaches the `factur-x.xml` file with the `Data` relationship (Factur-X 1.0x spec). -• Exports the report and opens the resulting PDF. +- Loads two metadata fragments and concatenates them into `AdditionalMetadata`. +- Sets PDF/A-3b compliance. +- Attaches the `factur-x.xml` file with the `Data` relationship (Factur-X 1.0x spec). +- Exports the report and opens the resulting PDF. ```cs using System; @@ -192,7 +192,7 @@ File to Review: ## Files to Review -* [Form1.cs](./CS/ZUGFeRD_sample/Form1.cs) (VB: [Form1.vb](./VB/ZUGFeRD_sample/Form1.vb)) +- [Form1.cs](./CS/ZUGFeRD_sample/Form1.cs) (VB: [Form1.vb](./VB/ZUGFeRD_sample/Form1.vb)) - [factur-x.xml](./CS/ZUGFeRD_sample/French/factur-x.xml) (VB: [factur-x.xml](./VB/ZUGFeRD_sample/French/factur-x.xml)) - [ZUGFeRD_DocumentInfo.txt](./CS/ZUGFeRD_sample/French/ZUGFeRD_DocumentInfo.txt) (VB: [ZUGFeRD_DocumentInfo.txt](./VB/ZUGFeRD_sample/French/ZUGFeRD_DocumentInfo.txt)) - [ZUGFeRD_PdfASchema.txt](./CS/ZUGFeRD_sample/French/ZUGFeRD_PdfASchema.txt) (VB: [ZUGFeRD_PdfASchema.txt](./VB/ZUGFeRD_sample/French/ZUGFeRD_PdfASchema.txt)) @@ -224,3 +224,4 @@ File to Review: (you will be redirected to DevExpress.com to submit your response) + From 58991f8a211b2898b41419d16d0a4c196e8b8426 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Tue, 3 Feb 2026 05:27:19 +0400 Subject: [PATCH 3/5] README auto update [skip ci] --- Readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Readme.md b/Readme.md index a7848ba..ff9a460 100644 --- a/Readme.md +++ b/Readme.md @@ -218,10 +218,10 @@ File to Review: -## Does this example address your development requirements/objectives? - -[](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=reporting-winforms-export-pdf-zugferd&~~~was_helpful=yes) [](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=reporting-winforms-export-pdf-zugferd&~~~was_helpful=no) - +## Does this example address your development requirements/objectives? + +[](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=reporting-winforms-export-pdf-zugferd&~~~was_helpful=yes) [](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=reporting-winforms-export-pdf-zugferd&~~~was_helpful=no) + (you will be redirected to DevExpress.com to submit your response) From 84cefaa30273628e3962c7dcf05e56f86889c707 Mon Sep 17 00:00:00 2001 From: ritazakhodyaeva <57389482+ritazakhodyaeva@users.noreply.github.com> Date: Tue, 3 Feb 2026 13:58:36 +0400 Subject: [PATCH 4/5] Update Readme.md Co-authored-by: Armina LaManna --- Readme.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Readme.md b/Readme.md index ff9a460..1f7c489 100644 --- a/Readme.md +++ b/Readme.md @@ -169,7 +169,7 @@ File to Review: - [ZUGFeRD_PdfASchema.txt](./CS/ZUGFeRD_sample/French/ZUGFeRD_PdfASchema.txt) - PDF/A extension schema used by Factur-X in XMP. The schema ensures that PDF/A validation correctly interprets `fx:*` fields defined in _ZUGFeRD_DocumentInfo.txt_. + The PDF/A extension schema used by Factur-X in XMP. The schema ensures that PDF/A validation correctly interprets `fx:*` fields defined in _ZUGFeRD_DocumentInfo.txt_. #### Supported Standards (French Invoices) @@ -218,10 +218,10 @@ File to Review: -## Does this example address your development requirements/objectives? - -[](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=reporting-winforms-export-pdf-zugferd&~~~was_helpful=yes) [](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=reporting-winforms-export-pdf-zugferd&~~~was_helpful=no) - +## Does this example address your development requirements/objectives? + +[](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=reporting-winforms-export-pdf-zugferd&~~~was_helpful=yes) [](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=reporting-winforms-export-pdf-zugferd&~~~was_helpful=no) + (you will be redirected to DevExpress.com to submit your response) From 3277fc554d8d6ca613cc704dbd08ab09fa3a4ac3 Mon Sep 17 00:00:00 2001 From: ritazakhodyaeva <57389482+ritazakhodyaeva@users.noreply.github.com> Date: Tue, 3 Feb 2026 13:59:17 +0400 Subject: [PATCH 5/5] Apply suggestions from code review Co-authored-by: Armina LaManna --- Readme.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Readme.md b/Readme.md index 1f7c489..62ae25d 100644 --- a/Readme.md +++ b/Readme.md @@ -5,7 +5,7 @@ # Reports for WinForms - Export a Report to ZUGFeRD (XRechnung and Factur-X) -This example exports a DevExpress report to a PDF/A-3b (ISO 19005-3) document and embeds an electronic invoice (e-invoice) XML file. The the resulting PDF complies with ZUGFeRD requirements and can be validated as one of the following formats: +This example exports a DevExpress report to a PDF/A-3b (ISO 19005-3) document and embeds an electronic invoice (e-invoice) XML file. The resulting PDF complies with ZUGFeRD requirements and can be validated as one of the following formats: - German e-invoice: XRechnung (ZUGFeRD container) - French e-invoice: Factur-X (ZUGFeRD container) @@ -73,15 +73,15 @@ void ButtonExportGermany_Click(object sender, EventArgs e) { - [xrechnung.xml](./CS/ZUGFeRD_sample/German/xrechnung.xml) - UN/CEFACT Cross Industry Invoice payload compliant with the German XRechnung profile. The report uses this file as its data source. + The UN/CEFACT Cross Industry Invoice payload is compliant with the German XRechnung profile. The report uses this file as its data source. - [ZUGFeRD_DocumentInfo.txt](./CS/ZUGFeRD_sample/German/ZUGFeRD_DocumentInfo.txt) - XMP RDF fragment that contains ZUGFeRD/XRechnung metadata for the PDF document. + The XMP RDF fragment that contains ZUGFeRD/XRechnung metadata for the PDF document. - [ZUGFeRD_PdfASchema.txt](./CS/ZUGFeRD_sample/German/ZUGFeRD_PdfASchema.txt) - XMP PDF/A extension schema that defines the `fx` namespace and its properties. The schema ensures that PDF/A validation correctly interprets `fx:*` fields defined in _ZUGFeRD_DocumentInfo.txt_. + The XMP PDF/A extension schema that defines the `fx` namespace and its properties. The schema ensures that PDF/A validation correctly interprets `fx:*` fields defined in _ZUGFeRD_DocumentInfo.txt_. #### Supported Standards (German Invoices) @@ -165,7 +165,7 @@ File to Review: - [ZUGFeRD_DocumentInfo.txt](./CS/ZUGFeRD_sample/French/ZUGFeRD_DocumentInfo.txt) - XMP RDF fragment that contains Factur-X-specific metadata for the PDF document. + The XMP RDF fragment that contains Factur-X-specific metadata for the PDF document. - [ZUGFeRD_PdfASchema.txt](./CS/ZUGFeRD_sample/French/ZUGFeRD_PdfASchema.txt)