ZUGFeRD mit AMYUNI PDF Creator, wie schiebt man dem PDF eine XML unter?

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Antworten
Benutzeravatar
Eugen
Rookie
Rookie
Beiträge: 18
Registriert: Di, 14. Okt 2008 22:11
Wohnort: Köln

ZUGFeRD mit AMYUNI PDF Creator, wie schiebt man dem PDF eine XML unter?

Beitrag von Eugen »

Hallo zusammen,
auch ich versuche mich an das Thema ZUGFeRD mit Zusammenhang mit dem AMYUNI Drucker Treiber. Ich habe AMYUNI PDF Creator, dort kann man die Ausgang PDF auf das Format PDF/A-3u einstellen.

Als Ergebnis bekommt man eine PDF Datei wo ein Platz für eine XML Datei reserviert ist.

Die XML Datei im ZUGFeRD Format kann ich separat erstellen. Mein Problem ist, wie ich die XML Datei mit der PDF Datei im XBase verheiraten kann. Hat da jemand Erfahrung und so etwas realisiert hat?
ZugFerd-Amyuni.docx
(90.71 KiB) 29-mal heruntergeladen
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 226
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 16 Mal
Danksagung erhalten: 4 Mal

Re: ZUGFeRD mit AMYUNI PDF Creator, wie schiebt man dem PDF eine XML unter?

Beitrag von Dominik Krebs »

Hallo Eugen,
ich habe mich selbst erst vor kurzem mit diesem Thema beschäftigt.
In der Dokumentation von Amiuny steht eigentlich alles drin was du beachten musst.

https://www.amyuni.com/WebHelp/Amyuni_D ... upport.htm

In Xbase verwende ich folgende funktionen, um die Werte zu setzem

Code: Alles auswählen

#DEFINE IO_NODUPLICATES 0x00000001
#DEFINE IO_DOWNSAMPLE 0x00000002
#DEFINE IO_CONVERTTOCMYK 0x00000004
#DEFINE IO_OUTPUTPDFA 0x00000008
#DEFINE IO_XMPMETADATA 0x00000010
#DEFINE IO_OUTPUTPDFA8 0x00000020
#DEFINE IO_NOPRECOMPRESSED 0x00000040
#DEFINE IO_OUTPUTPDFX1 0x00000080
#DEFINE IO_OUTPUTPDFX3 0x00000100
#DEFINE IO_COMPRESSJBIG2 0x00000100  // Allowed Only with PDF/A-1 and PDF/A-3
#DEFINE IO_SIMPOSTSCRIPT 0x80000000

#DEFINE FNO_NoPrompt 0x00000001
#DEFINE FNO_UseFileName 0x00000002
#DEFINE FNO_Concatenate 0x00000004
#DEFINE FNO_DisableCompression 0x00000008
#DEFINE FNO_EmbedFonts 0x00000010
#DEFINE FNO_BroadcastMessages 0x00000020
#DEFINE FNO_PrintWatermark 0x00000040
#DEFINE FNO_MultilingualSupport 0x00000080
#DEFINE FNO_EncryptDocument 0x00000100  // It cannot be used for PDF/A creation
#DEFINE FNO_EmbedStandardFonts 0x00200000
#DEFINE FNO_EmbedLicensedFonts 0x00400000
#DEFINE FNO_Jpeg2000Compression 0x01000000  // Allowed Only with PDF/A-3
#DEFINE FNO_EncryptDocument128 0x40000000  // It cannot be used for PDF/A creation

Code: Alles auswählen

      DllCall(hDll, DLL_STDCALL, "EnablePrinter"      , hDriver, @P_AMYUNI_LICENCE_NAME, @P_AMYUNI_ACTIVATION)
      DllCall(hDll, DLL_STDCALL, "SetImageOptions", hDriver, BOr(IO_OUTPUTPDFA8,IO_XMPMETADATA))
      DllCall(hDll, DLL_STDCALL, "SetFileNameOptions", hDriver, BOr(FNO_NoPrompt,FNO_EmbedFonts,FNO_MultilingualSupport,FNO_EmbedStandardFonts,FNO_EmbedLicensedFonts,FNO_Jpeg2000Compression))
      DllCall(hDll, DLL_STDCALL, "SetPrinterParamInt", hDriver, "PDFALevel", BOr((256*Asc("B")),3))
      DllCall(hDll, DLL_STDCALL, "SetDefaultConfigEx", hDriver)     
Anschließend lässt sich auch die Xml Datei einbilden. Hierfür verwende ich folgende funktion:

Code: Alles auswählen

PROCEDURE AttachFileOnPDF(oAD1,cFilePDF,cEmpfaengerEmail)
LOCAL oFRech
LOCAL nHandle
LOCAL cFilename      := "ZuGFeRD-invoice.xml"
LOCAL cFilePath      := cLocalDataPath+"ZuGFeRD-invoice.xml"
LOCAL cDescription   := "Invoice"
LOCAL cMimeType      := "application/xml"
LOCAL nDocHandle     := 0

         DEFAULT cEmpfaengerEmail TO ""

         oFRech := ADTOpen("f_rech.adt")
         oFRech:IndexName := "f_rech3"
         oFRech:SetFilter( 'renr == "'+oAD1:renr:asString+'"' )
         oFRech:GoTop()

         RechnungZuZugferd(oAD1,oFRech,cEmpfaengerEmail,cFilePath)

         oFRech:Close()

         nHandle := DllLoad(AM_DLL_FILE)
         DllCall(nHandle,DLL_STDCALL,"SetLicenseKeyA",P_AMYUNI_LICENCE_NAME,P_AMYUNI_ACTIVATION)
         DllCall(nHandle,DLL_STDCALL,"DocOpen",@nDocHandle,cFilePDF)
         DllCall(nHandle,DLL_STDCALL,"DocAddFileAttachmentEx",nDocHandle,cFilename,cFilePath,cDescription,cMimeType,"Alternative")
         DllCall(nHandle,DLL_STDCALL,"DocSave",nDocHandle,cFilePDF)
         DllUnload( nHandle )

RETURN

Du musst den Code nur etwas auf deine Bedürfnisse anpassen.

Hoffe das hilft dir weiter :)
Gruß Dominik
Benutzeravatar
Eugen
Rookie
Rookie
Beiträge: 18
Registriert: Di, 14. Okt 2008 22:11
Wohnort: Köln

Re: ZUGFeRD mit AMYUNI PDF Creator, wie schiebt man dem PDF eine XML unter?

Beitrag von Eugen »

Hallo Dominik,
vielen Dank für Dein Lösung Ansatz, ich werde es morgen ausprobieren.

Allerdings noch eine Frage, wie heißt die DLL (AM_DLL_FILE) die ich anbinden soll?

Gruß Eugen
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 226
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 16 Mal
Danksagung erhalten: 4 Mal

Re: ZUGFeRD mit AMYUNI PDF Creator, wie schiebt man dem PDF eine XML unter?

Beitrag von Dominik Krebs »

Entschuldige, das ist mir entgangen.
Ich habe eine weitere Include Datei, in der vieles enthalten ist.
Dateianhänge
AmPdf.ch
(2.6 KiB) 27-mal heruntergeladen
Gruß Dominik
Antworten