Mustang wurde ursprünglich in Java geschrieben aber seit April 2022 gibt es auch Version für .net-Programmiersprachen. Wie die Java-Version ist sie ist open source, unterliegt allerdings der restriktiveren Affero-GPL-lizensiert und Teil des Mustang-Abos.
Sie wird kein ZUGFeRD Version 1 und keine Validierung unterstützen und verzichtet derzeit noch auf Order-X, Zuschläge/Rabatte, Dateianhänge, Gutschriften und Stornorechnungen sowie Bezüge beispielsweise auf Lieferschine, Verträge oder andere Dokumente: Wir brauchen Ihr Feedback was als erstes nachgezogen werden muss.
Und die .net-Version stellt bereits XRechnung, ZUGFeRD 2 und Factur-X sowie Unterstützung für beliebige PDF-Eingabedateien zur Verfügung, das heißt, dass sie sogar verwendet werden kann wenn die Eingabe noch nicht einmal PDF/A ist.

Als kleines Goodie läßt sich die Umwandlung von PDF in PDF/A-3 auch separat nutzen.

Intern basiert die PDF/A-3-Funktionalität auf Ghostscript, für eine kommerzielle Verbreitung kann eine kommerzielle Ghostscript-Lizenz nötig sein.

Die .net-Version kann sehr ähnlich wie Mustang+Java benutzt werden:

using org.mustangproject;
using System.IO;
using java.math;
		Invoice i = (new Invoice()).setDueDate(DateTime.Now).setIssueDate(DateTime.Now).setDeliveryDate(DateTime.Now).setSender((new TradeParty("Test company","teststr","55232","teststadt","DE")).addTaxID("DE4711").addVATID("DE0815").setContact(new Contact("Hans Test","+49123456789","test@example.org")).addBankDetails(new BankDetails("DE12500105170648489890","COBADEFXXX"))).setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setReferenceNumber("991-01484-64").setNumber("123").
		addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), new BigDecimal("1.0"), new BigDecimal("1.0")));

		ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
		zf2p.setProfile(Profiles.getByName("XRechnung"));
		zf2p.generateXML(i);
		System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();

		string outfilename="xrechnung.xml";
                File.WriteAllBytes(outfilename, zf2p.getXML());

Ersetzen Sie einfach Date durch System.DateTime. ZUGFeRDExporterFromPDFA1 erfordert einen String-Konstruktor, den Pfad zu Ihrer nativen Ghostscript DLL.

Mit dem invoice-Objekt können Sie wie folgt Factur-X/ZUGFeRD PDF-Dateien schreiben



ZUGFeRDExporter ex=new ZUGFeRDExporter("gsdll64.dll").load("blanko.pdf");
ex.setTransaction(i);
ex.export("factur-x.pdf");


Zum testen können Sie unsere MustangBlanko PDF-A/1-Datei verwenden wobei Mustang.net tatsächlich auch normale PDF-Dateien in PDF/A-3 umwandeln wird.

Um zu bestätigen dass die Beträge in der XML-Struktur Ihren Beträgen entsprechen können Sie beispielsweise folgenden Quelltext benutzen:


TransactionCalculator tc=new TransactionCalculator(i);
...tc.getGrandTotal()...

Für “arbitrary precision” wird “java.math”‘s BigDecimal, d.i. das OpenJDK.BigMathNET Paket benutzt. In der .csproj machen die folgenden Itemgroup-Einträge Sinn:


   <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
    <PackageReference Include="itext7" Version="7.2.1" />    
    <PackageReference Include="OpenJDK.BigMathNET" Version="1.0.2.1" />
    <PackageReference Include="Ghostscript.NET" Version="1.2.3" />
    <PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="6.0.4" />

    <Reference Include="mustang">
      <HintPath>mustang_net.dll</HintPath>
    </Reference>
  </ItemGroup>



Tragen Sie sich hier ein für den kostenlosen Zugang zur Beta und für Neuigkeiten im Entwicklungsprozess:

Wir werden Ihre E-Mail-Adresse ausschließlich zum Versand von Downloadlinks und Hinweise
über neue Versionen und den generellen Beta-Status von Mustang.net verwenden.
Dafür verwenden wir unseren Dienstleister “Sendinblue”.
Selbst in Zeiten erhöhten Mailaufkommens erhalten sie maximal circa eine Mail pro Woche.
Die Mitgliedschaft in diesem Verteiler und im Beta-Programm bis dieses beendet wurde ist kostenfrei,
Sie erhalten eine erste Mail um Ihre E-Mail-Adresse zu bestätigen und selbstverständlich können Sie
diesen Verteiler und damit auch die Beta jederzeit verlassen.