Mustang jar für Kommandozeile

89 views
Skip to first unread message

Uli Reinke

unread,
Jan 7, 2025, 7:26:57 AMJan 7
to ZUGFeRD
Hallo zusammen,
zunächst einmal ein Gutes Neues noch!
Ich bin Neuling bzgl. Mustang und will die jar-Datei im Kommandozeilenmodus nutzen.
Dabei will ich eine ZUGFeRD.xml in eine bestehende PDF Datei einbinden.

Ich benutze folgendes Kommando:
java -jar Mustang-CLI-2.15.2.jar --action combine --source input.pdf --source-xml ZUGFeRD.xml --out mustang.pdf --format zf --version 2 --profile MINIMUM --no-additional-attachments

Ich bekomme da folgende Meldung:
Additional file attachments filename (empty for none):
Format set to zf
Version set to 2
Profile set to MINIMUM
13:13:52.046 [main] ERROR ROOT - Unknown ZUGFeRD profile 'minimum'
java.lang.Exception: Unknown ZUGFeRD profile 'minimum'
        at org.mustangproject.commandline.Main.performCombine(Main.java:697)
        at org.mustangproject.commandline.Main.main(Main.java:409)
Unknown ZUGFeRD profile 'minimum'

Was ist an dem Kommando bzw. Profil falsch? Muss die input.pdf-Datei schon ein PDF/A-3 Datei sein?

Wenn ich das Standardkommando
java -Xmx1G -Dfile.encoding=UTF-8 -jar Mustang-CLI-2.15.2.jar --action extract

verwende, dann bekomme ich folgende Meldung:
Source PDF (default: invoice.pdf):
ZUGFeRD XML (default: factur-x.xml):
Output file already exists, try again or CTRL+C to cancel
ZUGFeRD XML (default: factur-x.xml):

Die Standard-Output-Datei invoice.ZUGFeRD.pdf existiert jedoch nicht.
Was mache ich da falsch?

Mein Ziel ist es, per Kommandozeile in eine bestehende PDF-Datei, PDF/1 oder PDF/A-3 - was eben notwendig wäre -, eine ZUGFeRD.xml zu integrieren
und wieder zu extrahieren. Ist das mit Mustang möglich?

Über ein kurzes Feedback würde ich mich freuen.
Danke

Matthias Hanft

unread,
Jan 7, 2025, 8:35:52 AMJan 7
to ZUGFeRD
'Uli Reinke' via ZUGFeRD schrieb:
>
> Ich benutze folgendes Kommando:
> java -jar Mustang-CLI-2.15.2.jar --action combine --source input.pdf --source-xml ZUGFeRD.xml --out mustang.pdf --format zf --version 2 --profile MINIMUM --no-additional-attachments
> Unknown ZUGFeRD profile 'minimum'

Ich denke, das müsste "--profile m" lauten (immer nur den ersten Buchstaben
angeben bzw. das, was bei "help" in <> steht):

[--profile <...>]: set ZUGFeRD profile
For ZUGFeRD v1 or Order-X: <B>ASIC, <C>OMFORT or EX<T>ENDED
For ZUGFeRD v2: <M>INIMUM, BASIC <W>L, <B>ASIC, <C>IUS, <E>N16931, <X>Rechnung, EX<T>ENDED

"Minimum" erfüllt aber meines Wissens nicht die gesetzlichen Vorschriften -
es muss "E" oder "X" sein (evtl. auch "T").

> Was ist an dem Kommando bzw. Profil falsch? Muss die input.pdf-Datei schon ein PDF/A-3 Datei sein?

Nein, die muss PDF/A-1 sein.

Wenn sie das nicht ist, kann man sie z.B. mit Ghostscript zu einer machen.

> Wenn ich das Standardkommando
> java -Xmx1G -Dfile.encoding=UTF-8 -jar Mustang-CLI-2.15.2.jar --action extract
> verwende, dann bekomme ich folgende Meldung:
> Source PDF (default: invoice.pdf):
> ZUGFeRD XML (default: factur-x.xml):
> Output file already exists, try again or CTRL+C to cancel
> ZUGFeRD XML (default: factur-x.xml):
> Die Standard-Output-Datei invoice.ZUGFeRD.pdf existiert jedoch nicht.
> Was mache ich da falsch?

Du sagst Mustang, dass es aus einer ZUGFeRD-Rechnung namens "invoice.pdf"
die darin enthaltene XML-Datei extrahieren und in eine Datei namens
"factur-x.xml" schreiben soll; aber Mustang weigert sich, weil es die
Zieldatei "factur-x.xml" offenbar schon gibt und Mustang die nicht
überschreiben mag.

> Mein Ziel ist es, per Kommandozeile in eine bestehende PDF-Datei, PDF/1 oder PDF/A-3 - was eben notwendig wäre -, eine ZUGFeRD.xml zu integrieren
> und wieder zu extrahieren. Ist das mit Mustang möglich?

Ja, natürlich.

Gruß Matthias.

Uli Reinke

unread,
Jan 7, 2025, 1:25:06 PMJan 7
to ZUGFeRD
Hallo Matthias,

vielen Dank für die schnelle Antwort. Es war wirklich der Parameter m bzw. e oder x.
Der Kommandoaufruf läuft jetzt weiter, jedoch kommt jetzt die Meldung:
17:35:50.161 [main] ERROR ROOT - File is not a valid PDF/A-1 input file
java.io.IOException: File is not a valid PDF/A-1 input file

Ich dachte, dass ich mit
gswin64c.exe -sDEVICE=pdfwrite -dPDFA=1 -dCompatibilityLevel=1.4 -dBATCH -dNOPAUSE -sOutputFile=output.pdf input.pdf

Laut exiftool bekomme ich eine PDF Version 1.4, die von der jar nicht angenommen wird.
Bei dem CompatibilityLevel kann ich eingeben, was ich will. Ich habe immer 1.4.

Vielleicht hast Du eine gültigen Ghostscript Befehl, der für die jar eine gültige PDF/A-1 erzeugt.
Danke,

VG
Uli

Matthias Hanft

unread,
Jan 7, 2025, 2:00:46 PMJan 7
to ZUGFeRD
'Uli Reinke' via ZUGFeRD schrieb:
>
> Vielleicht hast Du eine gültigen Ghostscript Befehl, der für die jar eine gültige PDF/A-1 erzeugt.

Ja, aber ganz so einfach ist es nicht.

Der Befehl selbst lautet (wobei einiges vermutlich überflüssig ist):

gswin64c.exe -dNOSAFER -dPDFA -dBATCH -dNOPAUSE -sPAPERSIZE=a4 -sProcessColorModel=DeviceRGB -sDEVICE=pdfwrite -dPDFACompatibilityPolicy=2 -sOutputFile=output.pdf PDFA_def.ps input.pdf

Die Datei PDFA_def.ps enthält diverse Steueranweisungen und
einen Pfad zur Datei AdobeRGB1998.icc, der angepasst werden muss.

Beide Dateien findet man im Web, einfach mal googeln.

Gruß Matthias.

Uli Reinke

unread,
Jan 7, 2025, 2:29:17 PMJan 7
to ZUGFeRD
Hallo  Matthias,

Danke für die Info.
Ja, das sieht recht kompliziert aus.
Ich glaube, ich tue mich leichter, wenn ich dafür sorge, dass die relevanten PDF Dateien
gleich im A-1 Format erstellt werden. Ich denke, das bekomme ich hin...

VG
Uli

Uli Reinke

unread,
Jan 8, 2025, 4:16:05 AMJan 8
to ZUGFeRD
Falls es jemand bräuchte:
Dieser VBA Code macht für Excel PDF/A-1:
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:\swde\print\output.pdf", Quality:=xlQualityStandard, IncludeDocProperties _ :=True, IgnorePrintAreas:=False, OpenAfterPublish:=True 

Ich denke, dass es für Word ähnlich ist.
Dieses PDF kann dann Mustang verwenden...

VG
Uli

Uli Reinke

unread,
Jan 8, 2025, 8:57:49 AMJan 8
to ZUGFeRD
Hallo,

jetzt habe ich doch noch was. Eine Beispiel  .ZUGFeRD hat wohl nicht alle (Zahlen-)Felder belegt. Ich weiß nicht genau.
welches keinen Eintrag hat. Beim Abhängen der XML Datei kommt diese Fehlermeldung, die Datei wird jedoch vollständig extrahiert.
Ist diese Meldung programmtechnisch zu vermeiden?
14:54:13.967 [main] ERROR o.m.ZUGFeRD.ZUGFeRDInvoiceImporter - Failed to parse PDF
java.lang.NullPointerException: Cannot invoke "java.math.BigDecimal.setScale(int, java.math.RoundingMode)" because "value" is null
        at org.mustangproject.XMLTools.nDigitFormat(XMLTools.java:42)
        at org.mustangproject.ZUGFeRD.ZUGFeRDInvoiceImporter.extractInto(ZUGFeRDInvoiceImporter.java:951)
        at org.mustangproject.ZUGFeRD.ZUGFeRDInvoiceImporter.setDocument(ZUGFeRDInvoiceImporter.java:267)
        at org.mustangproject.ZUGFeRD.ZUGFeRDInvoiceImporter.setRawXML(ZUGFeRDInvoiceImporter.java:240)
        at org.mustangproject.ZUGFeRD.ZUGFeRDInvoiceImporter.setRawXML(ZUGFeRDInvoiceImporter.java:254)
        at org.mustangproject.ZUGFeRD.ZUGFeRDInvoiceImporter.extractFiles(ZUGFeRDInvoiceImporter.java:215)
        at org.mustangproject.ZUGFeRD.ZUGFeRDInvoiceImporter.extractLowLevel(ZUGFeRDInvoiceImporter.java:150)
        at org.mustangproject.ZUGFeRD.ZUGFeRDInvoiceImporter.setPDFFilename(ZUGFeRDInvoiceImporter.java:86)
        at org.mustangproject.ZUGFeRD.ZUGFeRDInvoiceImporter.<init>(ZUGFeRDInvoiceImporter.java:77)
        at org.mustangproject.ZUGFeRD.ZUGFeRDImporter.<init>(ZUGFeRDImporter.java:39)
        at org.mustangproject.commandline.Main.performExtract(Main.java:547)
        at org.mustangproject.commandline.Main.main(Main.java:412)

Danke.

VG
Uli

jochen...@gmail.com

unread,
Jan 23, 2025, 7:59:39 AMJan 23
to ZUGFeRD
Hallo,
sieht nicht aus als wäre es die aktuelle Version , z. 951 vom ZUGFeRDInvoiceImporter ist grad leer, könnte aber in Richtung TaxPercent gehen. Issue auf https://github.com/ZUGFeRD/mustangproject/issues unter Angabe der Datei bitte, wenn die vertraulich ist gerne anonymisieren.

Reply all
Reply to author
Forward
0 new messages