2.16.5

Today, May 22nd, 2025, we released version 2.16.5 of our open source e-invoicing toolkit Mustangproject.

New Features

This release supports Factur-X 1.07.3/ZUGFeRD 2.3.3 (#833) and

Corrections

improves UBL parsing (#816, #835). Further fixes include

  • #819 correct generateXSLTFromSchematron profile
  • #458 Its not possible to add multiple PaymentTerms when using the extended profile
  • #788 Invoice taxes aren’t acessible
  • #790 Crash upon importing an invoice with empty name.
  • upgrade from PDFBOX 3.0.2 to 3.0.5
  • #817 added ZUGFeRD.PDF-csharp to list of PDF creators
  • #811 Fix typo in xpath when extracting buyer trade party address

Two reasons for the micro increase of the version number:

  • ZUGFeRD 2.3.3 does not require updates on sending or receiving side, but the validation has been corrected and is now based on version 15 of the codelists.
  • The work on correcting absolute item allowances (#764) progresses, but currently fails a roundtrip, i.e. either invoices are produced correctly or parsed correctly. This change can and will be properly tested and released in a later version, a 2.17.0 at the end of June fixing this (and changing calculation) sounds realistic.

Mustang.net-merged-into-Ghostscript.net-Webinar

Hello,

As documented (p35f) there is a a C# client for MustangServer, which you can use to read/write and validate e-invoices. While we do continue with Mustangserver, and the Java version of Mustangproject as usual, our former Mustang.net initiative has now been completely merged into Ghostscript.net.

We would like to invite you to a explanatory webinar in a online-only event on 15.05.2025, 15:00-16:00 CET. Please access the details and the application for a participation link, which we kindly ask to fill out by the end of Wednesday (May 14th).

If you want to try former Mustang.net-now-Ghostscript.net-features you can add Ghostscript.net via nuget to your project and use this snippet to get you started:

 

using Ghostscript.NET.PDFA3Converter.ZUGFeRD;

Invoice i = (new Invoice()).setDueDate(DateTime.Now).setIssueDate(DateTime.Now).setDeliveryDate(DateTime.Now).setSender((new TradeParty("Test company", "Test Street 1", "55232", "Test City", "DE")).addTaxID("DE4711").addVATID("DE0815").setContact(new Contact("Hans Test", "+49123456789", "te...@example.org")).addBankDetails(new BankDetails("DE12500105170648489890", "COBADEFXXX"))).setRecipient(new TradeParty("Franz Mueller", "Test Street 12", "55232", "Entenhausen", "DE")).setReferenceNumber("991-01484-64").setNumber("123").addItem(new Item(new Product("Test product", "", "H87", 19m), 1.0m, 1.0m));

ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
zf2p.generateXML(i);
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();

string outfilename = "c:\\your\\dir\\gs-factur-x.xml";
File.WriteAllBytes(outfilename, zf2p.getXML());