LL28 - Erstellung ZugFerd-PDF scheitert (mit XBase)

Hallo,

ich habe den Export einer PDF-Datei mit xml-Informationen (ZugFerd) probiert, und ein bestehendes Rechnungsmodul um ein paar Parameter erweitert.

(Die Zugferd-DLLs cmll28xl_zugferd2.dll und cxll28xl_zugferd2.dll habe ich zum Testen indas Verzeichnis kopiert, in dem die EXE gestartet wird.)

Diese Zeilen habe ich in den Programmcode eingefügt:

// nRet := LlXSetParameter( ::hJob, LL_LLX_EXTENSIONTYPE_EXPORT, "PDF", "PDF.Conformance", "pdfa3b" )
nRet := LlXSetParameter( ::hJob, LL_LLX_EXTENSIONTYPE_EXPORT, "PDF", "PDF.PdfZUGFeRDXmlPath", "C:\\A-NEU\\factur-x.xml" )
nRet := LlXSetParameter( ::hJob, LL_LLX_EXTENSIONTYPE_EXPORT, "PDF", "PDF.PdfZUGFeRDVersion", "2.1" )
nRet := LlXSetParameter( ::hJob, LL_LLX_EXTENSIONTYPE_EXPORT, "PDF", "PDF.PdfZUGFeRDConformanceLevel", "EXTENDED" )

Im Debwin-Log sieht es für mich so aus, als ob das in Ordnung wäre (siehe unten.)

Auf die erzeugte PDF-Datei hat das allerdings keinen Einfluß - die Größe der PDF-Datei ist exakt die selbe, wie ohne Setzen der Parameter und eine Online-Prüfung (zugferd-community.net) ergibt einen nicht näher erläuterten Fehler. Die angegebene xml-Datei allein geprüft ist in Ordnung.

Kann mir jemand einen Tipp geben, wo das Problem liegen könnte?

Vielen Dank!!


Auszug Debwin-Log:

▪;1000;02.11.2023 16:55:59.606;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;LS: LsSetDebug(0)
▪;1000;02.11.2023 16:55:59.607;2;LL.API;6048;100:2=CMLL28♦101:1=0;>LlXSetParameter(1,0x00000001,'PDF','Export.File','0307498_10320_1000016_DIMKEBAUARTGMBH.pdf')
▪;1000;02.11.2023 16:55:59.607;2;LL.API;6048;100:2=CMLL28♦101:1=0;<LlXSetParameter() -> 0 (00000000)
▪;1000;02.11.2023 16:55:59.607;2;LL.API;6048;100:2=CMLL28♦101:1=0;>LlXSetParameter(1,0x00000001,'PDF','PDF.PdfZUGFeRDXmlPath','C:\\A-NEU\\factur-x.xml')
▪;1000;02.11.2023 16:55:59.607;2;LL.API;6048;100:2=CMLL28♦101:1=0;<LlXSetParameter() -> 0 (00000000)
▪;1000;02.11.2023 16:55:59.607;2;LL.API;6048;100:2=CMLL28♦101:1=0;>LlXSetParameter(1,0x00000001,'PDF','PDF.PdfZUGFeRDVersion','2.1')
▪;1000;02.11.2023 16:55:59.607;2;LL.API;6048;100:2=CMLL28♦101:1=0;<LlXSetParameter() -> 0 (00000000)
▪;1000;02.11.2023 16:55:59.607;2;LL.API;6048;100:2=CMLL28♦101:1=0;>LlXSetParameter(1,0x00000001,'PDF','PDF.PdfZUGFeRDConformanceLevel','EXTENDED')
▪;1000;02.11.2023 16:55:59.607;2;LL.API;6048;100:2=CMLL28♦101:1=0;<LlXSetParameter() -> 0 (00000000)
▪;1000;02.11.2023 16:55:59.607;2;LL.API;6048;100:2=CMLL28♦101:1=0;>LlXSetParameter(1,0x00000001,'PDF','Export.Path','C:\\Harmonia\\_CRAFT\\ARCHIVE\\RECHNUNGEN\\2023\\')
▪;1000;02.11.2023 16:55:59.607;2;LL.API;6048;100:2=CMLL28♦101:1=0;<LlXSetParameter() -> 0 (00000000)
▪;1000;02.11.2023 16:55:59.607;2;LL.API;6048;100:2=CMLL28♦101:1=0;>LlXSetParameter(1,0x00000001,'PDF','Export.Quiet','1')
▪;1000;02.11.2023 16:55:59.607;2;LL.API;6048;100:2=CMLL28♦101:1=0;<LlXSetParameter() -> 0 (00000000)
▪;1000;02.11.2023 16:55:59.608;2;LL.API;6048;100:2=CMLL28♦101:1=0;>LlPrintWithBoxStart(1,2,'Rechnung_Std.lst',0x800,1,00741882,'Archivierung Rechnung 0307498')
▪;1000;02.11.2023 16:55:59.608;2;LL.API;6048;100:2=CMLL28♦101:1=0;[CMLL28.DLL 28.3.2023.16209 (23-06-07 09:15)F]
▪;1000;02.11.2023 16:55:59.608;1;LL.Generic;6048;100:2=CMLL28♦101:1=0; [called by CMLL28.DLL]
▪;1000;02.11.2023 16:55:59.608;1;LL.Generic;6048;100:2=CMLL28♦101:1=0; [called by CMLL28.DLL]
▪;1000;02.11.2023 16:55:59.608;1;LL.Generic;6048;100:2=CMLL28♦101:1=0; [called by XPPRT1.dll]
▪;1000;02.11.2023 16:55:59.608;1;LL.Generic;6048;100:2=CMLL28♦101:1=0; [called by XPPRT1.dll]
▪;1000;02.11.2023 16:55:59.608;1;LL.Generic;6048;100:2=CMLL28♦101:1=0; [called by Harmonia_Craft.EXE]
▪;1000;02.11.2023 16:55:59.608;3;LL.API;6048;100:2=CMLL28♦101:1=0;WRN: the parent window's thread is not the current thread!
(...)
▪;1000;02.11.2023 16:55:59.848;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Export.File='0307498_10320_1000016_DIMKEBAUARTGMBH.pdf'
▪;1000;02.11.2023 16:55:59.848;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Export.Path='C:\\Harmonia\\_CRAFT\\ARCHIVE\\RECHNUNGEN\\2023\\'
▪;1000;02.11.2023 16:55:59.848;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.FitToPage='1'
▪;1000;02.11.2023 16:55:59.848;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.Title=''
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Feature.JPEG.Decode='True'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Export.SignatureProvider.Option='0'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.MaxOutlineDepth='2'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.FitText='1'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Verbosity.Table='1'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Export.Mail.CC=''
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Verbosity.Table.Cell='1'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.ExcludedFonts='Arial'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.Encryption.EnableCopying='0'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Verbosity.RTF='2'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Verbosity.Ellipse='1'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.ZUGFeRDVersion='0'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.CompressStreamMethod='1'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.Encryption.EncryptFile='0'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Export.Mail.ShowDialog='0'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.AddOutline='1'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.Author=''
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Export.SignResult='0'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.ExactPositioning='0'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.Encryption.EnablePrinting='0'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Export.SendAsMail='0'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Export.SaveAsZIPAvailable='1'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Export.OptionsButtonAvailable='1'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.PdfZUGFeRDXmlPath='C:\\A-NEU\\factur-x.xml'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Export.SignatureProvider='0'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Export.Quiet='1'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.TransitionEffect='0'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] PDF.Subject=''
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Verbosity.Rectangle='1'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Export.SignResultAvailable='0'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;    [cmll28EX] Export.SendAsMailAvailable='1'
▪;1000;02.11.2023 16:55:59.849;1;LL.Generic;6048;100:2=CMLL28♦101:1=0;   [cmll28EX] ->done

Hallo Ingo,

da bräuchten wir am besten mal das XML und ein vollständiges Log - entweder als Anhang hier oder über einen Supportcase.

Viele Grüße,

Jochen

Moin Jochen,

hier sind PDF, Log und die xml-Datei. Die xml-Datei “passt” nicht zum Inhalt des PDF - ich habe mir eine gültige XML geliehen, weil ich zunächst das Einbetten in die PDF testen wollte, bevor ich mich mit dem Erstellen der XML befasse.
0307498_10320_1000016_KOTHKESOFTWARE.zip (21.4 KB)

Debwin4.log4 (453.4 KB)
factur-x.xml (13.2 KB)

Hi Ingo,

vielen Dank für die Dateien. Jetzt ist es klarer :slight_smile:: Du setzt im Code die Option PDF.PdfZUGFeRDXmlPath, das ist mir gestern beim Durchlesen nicht aufgefallen. Richtig wäre PDF.ZUGFeRDXmlPath. Dann sollte es besser klappen. Du brauchst im übrigen seit Version 28.003 (die du verwendest) die Version und den Conformance Level nicht mehr explizit zu setzen, wir lesen das automatisch aus dem XML aus. Sieht im Logfile dann so aus (ich hab das mit 29 getestet):

Debwin4::CSV::V1;TypeCode;Timestamp;Level;Logger;Thread;Properties;Message
▪;1000;03.11.2023 10:26:57.175;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;     [cmll29ex] CExportTypePDFNextGen::HandleZUGFeRD()
▪;1000;03.11.2023 10:26:57.177;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;      [cmll29ex] INFO: selected ZUGFeRD version by export option PDF.ZUGFeRDVersion is '0'.
▪;1000;03.11.2023 10:26:57.177;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;      [cmll29ex] INFO: Automatic-Mode for ZUGFeRD handling is selected.
▪;1000;03.11.2023 10:26:57.177;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;      [cmll29ex] INFO: ZUGFeRD version '2.1' and ConformanceLevel 'EXTENDED' are used.
▪;1000;03.11.2023 10:26:57.177;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;      [cmll29ex] CExportTypePDFNextGen::GetZUGFeRDPdfInvoiceType('2.1', 'EXTENDED')
▪;1000;03.11.2023 10:26:57.177;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;       [cmll29ex] CExportTypePDFNextGen::helperGetZUGFeRDVersion('2.1')
▪;1000;03.11.2023 10:26:57.177;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;       [cmll29ex] CExportTypePDFNextGen::helperGetZUGFeRDVersion(516096) -> 1
▪;1000;03.11.2023 10:26:57.177;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;       [cmll29ex] CExportTypePDFNextGen::helperGetZUGFeRDTypeConformanceLevel(516096, 'EXTENDED')
▪;1000;03.11.2023 10:26:57.177;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;       [cmll29ex] CExportTypePDFNextGen::helperGetZUGFeRDTypeConformanceLevel(131072) -> 1
▪;1000;03.11.2023 10:26:57.177;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;      [cmll29ex] CExportTypePDFNextGen::GetZUGFeRDPdfInvoiceType(131072) -> 1
▪;1000;03.11.2023 10:26:57.181;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;     [cmll29ex] CExportTypePDFNextGen::HandleZUGFeRD() -> 1
▪;1000;03.11.2023 10:26:57.181;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;     [cmll29ex] CExportTypePDFNextGen::HandleFileAttachments(140969B0, '')
▪;1000;03.11.2023 10:26:57.181;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;     [cmll29ex] CExportTypePDFNextGen::HandleFileAttachments() -> 1
▪;1000;03.11.2023 10:26:57.414;1;LL.Generic;8F0;100:2=CMLL29♦101:1=2;    [cmll29ex] ->0x00000000

Und das Ergebnisfile kann erfolgreich validiert werden (mit deinem XML):

Ich habe den Validator der ZUGFeRD-Community verwendet.

tldr: verwende einfach nur das hier

nRet := LlXSetParameter( ::hJob, LL_LLX_EXTENSIONTYPE_EXPORT, "PDF", "PDF.ZUGFeRDXmlPath", "C:\\A-NEU\\factur-x.xml" )

und es sollte klappen :smiley: - schönes Wochenende!

Moin Jochen, herzlichen Dank und sorry!
Aber es ist ja offenbar so, dass man so etwas offensichtliches schlicht nicht sieht…
Als Zusatzwunsch wäre schön, wenn im Debug-Log angemeckert würde, wenn ein ungültiger Parameter verwendet wird…

Danke und ein schönes Wochenende!
Ingo

1 Like