Rechnungen im ZUGFeRD-Format

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Rechnungen im ZUGFeRD-Format

Beitrag von brandelh »

AUGE_OHR hat geschrieben: Mo, 02. Dez 2019 5:48 wenn man eine Lösung hat muss man sich nicht weiter darum kümmern ... und was ist mit dem "Rest" :?:
wir haben alle das selbe Problem und sprechen alle Xbase++ also was liegt näher als eine gemeinsame Lösung :?:
der Rest muss sich überlegen, ob er mit dem Reportgenerator L&L oder einem Produkt das direkt PDF erzeugen und Manipulieren kann (z.B. QuickPDF) am Besten bedient ist.
Denebu hat übrigens die Preise wieder in normale Regionen gepackt. Aber egal was die Produkte tatsächlich kosten,
sind sie immer noch billiger als eine eigene Lösung zu implementieren, PDF ist nicht einfach, PDF /A nicht einfacher ...

Die Zusammenarbeit mit vielen Entwicklern mit unterschiedlichen Interessen und Zielrichtungen macht die Sache nicht einfacher
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Rechnungen im ZUGFeRD-Format

Beitrag von ramses »

Der vollständigkeit halber:

List&Label erstellt als Standard normale PDF Files.
Kann aber mit einem einzigen Aufruf der Funktion:

Code: Alles auswählen

LlXSetParameter(hJob, LL_LLX_EXTENSIONTYPE_EXPORT, "PDF", "PDF.PDFAMode","1")
auf PDF/A umgestellt werden. Weitere Klimmzüge und Arbeiten sind nicht erforderlich.
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Rechnungen im ZUGFeRD-Format

Beitrag von AUGE_OHR »

hi,

ich bin mir durchaus bewusst das es "praktisch" ist eine 3-PP LIB "zu kaufen"
aber leider haben bislang nur User geantwortet die im Prinzip schon eine (kommerzielle) Lösung haben.

---


@Hubert : wenn man an der "exakt" selben Sache arbeitet kommen gewöhnlich auch die selben Resultate raus.
es scheinen die selben Entwickler zu sein die vorher den "normalen" PDF Open Source geschrieben haben und nun das Thema PDF/A angehen.

ich habe mir "den" Source schon angesehen aber keinen "Wrapper" gefunden wie man es aus xBase anspricht.
deshalb kann ich (noch) nicht sagen wie viel Arbeit das "übersetzten" nach Xbase++ ist.

das einzige "Problem" bei den Entwicklern : die sprechen Spanisch, Russisch, Indisch, Chinesisch (was ich nicht kann) :roll:
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Rechnungen im ZUGFeRD-Format

Beitrag von AUGE_OHR »

hi,
Jan hat geschrieben: Sa, 30. Nov 2019 20:31 Ich halte es da insgesamt wesentlich praktikabler, sie eine andere PDF-Bibliothek zu besorgen.
Vielleicht gibt es ja irgendwo sinnvolle kostenfreie Bibliotheken dafür.
das ist doch genau das wovon ich spreche.

veraPDF ist eine Open Source PDF-Bibliothek welches das /A Format enthält.
nur nützt so eine DLL / LIB einem Xbase++ User nichts denn der will ja nicht mit API Aufrufen arbeiten.

Hubert und Edgar haben "Wrapper" für Quick-PDF gemacht und auch bei L&L arbeiten vermutlich die meisten mit dem DLL-"Wrapper".

mit veraPDF gibt es ein neues "Spielzeug", wer will mitspielen :?:
gruss by OHR
Jimmy
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Rechnungen im ZUGFeRD-Format

Beitrag von ramses »

Guten Morgen

das was ich als veraPDF finde ist ein "Conformance Checker" der den Aufbau eines PDF/A Files auf einhaltung der Regeln prüft und einen Report darüber erstellt. Also nichts mit erstellen von PDF's sondern vorhandene Files prüfen .......
pdf-a1.jpg
pdf-a1.jpg (43.54 KiB) 7786 mal betrachtet
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Rechnungen im ZUGFeRD-Format

Beitrag von Jan »

AUGE_OHR hat geschrieben: Di, 03. Dez 2019 2:00mit veraPDF gibt es ein neues "Spielzeug", wer will mitspielen :?:
Neu??? Das Teil ist von 2017, ohne jemals irgendwelche Updates erfahren zu haben. Nicht mal eine weitere Beta, RC, oder sonst was.

Und wie Carlo schrieb: Ich war heute früh auf deren Seite. Und lese immer nur "Validator". Und habe Tests gelesen, die von einem ungeheuren Speicherhunger, lahmer Verarbeitung, und noch lahmerer Speicherfreigabe sprechen.

Und abgesehen davon: Was wäre denn an der Nutzung einer anderen Bibliothek anders als QuickPDF zu nutzen? Es ist so oder so nichts selbst geschriebenes, wie Du es in Deinem Post von Samstag gefordert/gewünscht hattest.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Rechnungen im ZUGFeRD-Format

Beitrag von ramses »

Hallo Jan

ganz so alt ist das Teil doch nicht, der Installer des Validators hat ein Datum vom Oktober 2019. Es ist ein Java-Programm.
Es hat mir jetzt geholfen die Einstellungen zu finden damit die L&L PDF's dem PDF/A-1A+B Standard entsprechen.
Es sind dies:

Code: Alles auswählen

 LlXSetParameter(hJob, LL_LLX_EXTENSIONTYPE_EXPORT, "PDF", "PDF.CompressStreamMethod", "3") 
 LlXSetParameter(hJob, LL_LLX_EXTENSIONTYPE_EXPORT, "PDF", "PDF.PDFAMode","1") )
 LlXSetParameter(hJob, LL_LLX_EXTENSIONTYPE_EXPORT, "PDF", "PDF.FontMode","8") )



Der Parameter "PDF.CompressStreamMethod" ist zwar nicht erforderlich verkleinert eine PDF von 530KB auf 114KB doch gewaltig was für die Archivierung tausender Files doch was ausmacht. Mit diesen Parametern sagt dann Vera das File ist "Complicant"

pdf-2.jpg
pdf-2.jpg (41.04 KiB) 7787 mal betrachtet
pdf3.jpg
pdf3.jpg (45.04 KiB) 7787 mal betrachtet
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Rechnungen im ZUGFeRD-Format

Beitrag von AUGE_OHR »

hi,

schön das ihr euch mit dem Thema beschäftigt, das ist doch schon mal ein Anfang.
das die Website von 2017 spielt keine Rolle sondern das Datum bei GitHub.

Ihr müsst euern Blick erweitern denn veraPDF ist nur ein Baustein von dem was xBase Entwickler "nutzen".
wenn ihr euch die Sourcen von Github anseht dann werdet Ihr feststellen das es, wie Carlo sagt, JAVA ist.

ich kann aber solchen Sprachen nicht sondern rede von xBase Code den es schon gibt.
wie ich sagte haben die Entwickler solche PDF Schnittstellen als Open Source schon veröffentlicht die von den User genutzt werden.

Open Office hat z.b einen PDF/A Convertor und so was wollen die xBase User auch gerne haben also wurde daran gearbeitet.

nun geht es nicht nur um das "schreiben" und "lesen" sondern um das was man bei der Weiterverarbeitung macht.
an dieser Stelle gibt es offensichtlich eine "Lücke" denn da wo Verifizierungen vorgesehen sind wird nicht immer geprüft.
solange so eine PDF/A aus einer "sicheren" Quelle ist kann man die automatisch weiterverarbeiten.

was aber wenn die "manipuliert" wurde :badgrin:
natürlich werde ich nicht darauf antworten "wie" man es machen "könnte". [-X

nun ist an veraPDF "irgend etwas" was die xBase Entwickler interessiert ...
wie Carlo zeigt kann es "nützliche" Informationen liefern und was das alles kann wird man wohl erst erfahren wenn man sich mit dem Source beschäftigt.

---

Open Source bedeutet auch seine Gedanke zu öffnen. Es ist eine "andere" Welt wo der kommerzielle Gedanke nicht im Vordergrund steht.
da dieses Forum keine kommerziellen Aspekte verfolgt dachte ich das es auch für diese Forum interessant wäre.

OK, warten wir ab bis die Release Version freigegeben wird denn das wollt Ihr anscheint sehen.
kann ich verstehen ... es wurde ja schon viel versprochen aber bis man es "auf dem Tisch" hat ... :santa:
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Rechnungen im ZUGFeRD-Format

Beitrag von Jan »

Moin,

die ganz allgemeine Bitte: Können wir zum ZUGFeRD zurückkehren in diesem Thread? Wenn jemand über andere PDF-Erzeuger sprechen möchte, kann er das ja gerne tun. Aber bitte woanders - hier geht es ansich um eine ganz spezielle Fachfrage.

Jan
Zuletzt geändert von Jan am Mi, 04. Dez 2019 7:07, insgesamt 1-mal geändert.
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Rechnungen im ZUGFeRD-Format

Beitrag von Wolfgang Ciriack »

Danke, Jan, so sehe ich das auch. PDFs erzeugen ist nicht das Problem, aus PDFs die ZUGFeRD-xml-Datei zu extrahieren ist das eigentliche Problem.
Viele Grüße
Wolfgang
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Rechnungen im ZUGFeRD-Format

Beitrag von brandelh »

Des Extrahieren kann kein Problem, sein, die XML Datei ist für die PDF nur ein weiterer integrierter Dateianhang.
Aus einer PDF z.B. die enthaltenen Bilder oder Texte zu holen ist mit QuickPDF möglich, warum sollte das nicht auch mit der XML so sein ?
Weiterhin soll diese durch Acrobat Reader anzeigbar sein, somit müsste dieser die Datei auch exportieren können oder ?
Wenn man sie dann erstmal hat, muss man halt die XML Struktur einlesen ... denke ich mal so als unbedarfter PDF Nutzer ;-)
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Rechnungen im ZUGFeRD-Format

Beitrag von ramses »

Hallo Jan,

.... bitte entschuldige das "Verlassen" des Themas ....

Das extrahieren von "Embedded" Dateien aus PDF Files ist recht einfach.

Zum holen der zugferd-invoice.xml verwende ich dazu den Aufruf:

Code: Alles auswählen


HBPrint_ExtractEmbeddedFiles( "e:\Rechnung_99038.pdf", "zugferd-invoice.xml", .t., @aResult, .f., @cError, @Tmp_Path )

// -------------------------------------------------------------------------------------
// HBPrint_ExtractEmbeddedFiles --> Embedded Files aus PDF extrahieren
//
//  cPDFName        PDFFile zur Bearbeitung
//  xFiles2Extact   Filename oder Array mit Filenamen die extrahiert werden sollen oder NIL für alle
//  lSave2File      .t. = Schreibt File in cTempPath, .f. = Rückgabe Inhalt in aResult
//  aResult         per Referenz  Array für Rückgabe  { { Filename, L„nge, FilenameSave, Inhalt als String } }
//
//  lWebApp        .t. Keine Anzeige --> Fehlerrückgabe nur in cErrorText
//
//  cErrorText      per Referenz enth„lt Fehlermeldung
//  cTempPath       Pfad wenn nicht Windows - Standard verwenet werden soll
//
//  Return         .t. Keine Fehler, .f. Fehler Aufgetreten
//
//
// erstellt: 12.12.17/cs     letzte erweiterung  02.02.18/cs
// -------------------------------------------------------------------------------------
// Para:  ( cPDFName, aFiles2Extract, lSave2File, @aResult, lWebapp, @cErrorText, @cTempPath )
//
//   aFiles2Extract kann Nil sein --> Alle Files werden bearbeitet
//

function HBPrint_ExtractEmbeddedFiles( cPDFName, xFiles2Extract, lSave2File, aResult, lWebapp, cErrorText, cTempPath )
local oObjPDF, nFileAnz, ret_val := .t., i, cFile, nKillCount := 10
local arr := {}

  default lWebApp to .f., lSave2File to .t.
  cErrorText := ""
  aResult := {}
  do case
    case valtype( xFiles2Extract ) = "C"
       xFiles2Extract := { xFiles2Extract }
    case valtype( xFiles2Extract ) != "A"
       xFiles2Extract := NIL
  endcase
  do while .t.
        if !hbprint_checkISLWPA(@cPDFName, @cErrorText, .f., "pdf" )
           exit
        endif
        oObjPDF := hbPrintPDF():new():create(@cTempPath)   // setzt A4 / Abgewandelte und gekürzte Klasse ohne BS-Meldungen
        if !oObjPDF:IsOK
            cErrorText := oObjPDF:cErrorText
            exit
        endif
        if !oObjPDF:loadFromFile( cPDFName )
            cErrorText := "PDF-File: " + cPDFName + " kann nicht geladen werden."
            exit
        endif
        nFileAnz := oObjPDF:EmbeddedFileCount()
        for i = 1 to nFileAnz
            cFile := oObjPDF:GetEmbeddedFileStrProperty(i,1)
            if empty(cFile)
                cErrorText += "Filename im PDF fehlt, Fileindex "+alltrim(str(i))+" / "
                loop
            endif
            if xFiles2Extract != nil
               if ascan(xFiles2Extract,{|x|lower(x)==lower(cFile)}) = 0
                  loop
               endif
            endif
            //  aResult   { { Filename, L„nge, FilenameSave, Inhalt als String } }
            aadd(aResult, { cFile, 0, "", "" } )
            if lSave2File
                aResult[i,3] := cTempPath + cFile
                do while file(aResult[i,3]) .and. nKillCount > 0
                        ferase(aResult[i,3])
                        sleep(10)
                        nKillCount --
                enddo
                if file(aResult[i,3])
                   cErrorText +=  aResult[i,3] + " ist in Benutzung, kann nicht entfernt werden. / "
                   loop
                endif
                if oObjPDF:GetEmbeddedFileContentToFile(i, aResult[i,3] )
                   aResult[i,2] := filesize(aResult[i,3])
                else
                   cErrorText +=  aResult[i,3] + " kann nicht erstellt werden. / "
                endif
            else
                aResult[i,4] := oObjPDF:GetEmbeddedFileContentToString(i)
                aResult[i,2] := len(aResult[i,4])
            endif
        next
   exit
enddo
 oObjPDF:destroy()
  if !empty(cErrorText)
     cErrorText += "HBPrint_ExtractEmbeddedFiles - " + cErrorText
     ret_val := .f.
     if !lwebApp
        msgbox(cErrorText)
     endif
  endif

return(ret_val)
 


Die die Funktion verwendet die Klasse:
// ------------------------------------------------------------------------
// HBPrintPDF Klasse von www.familie-brandel.de
//
// Abgewandelte und auf verwendeten Umfang gekürzte Klasse ohne BS-Meldungen
//
//
// benötigt QuickPdf DLL DebenuPDFLibraryDLL1611.dll
// Lizenzschlüssel von www.QuickPDF.com
//
// OT4XB.DLL >= 001.005.012.021 von www.xbwin.com
//
// Ohne die Arbeit von Hubert Brandel und Pablo Botella Navaro
// und seine OT4XB wäre dies nicht möglich.
// ------------------------------------------------------------------------
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Rechnungen im ZUGFeRD-Format

Beitrag von Jan »

ramses hat geschrieben: Mi, 04. Dez 2019 10:46.... bitte entschuldige das "Verlassen" des Themas ....
Ach Carlo,

hast Du doch gar nicht. Das hatte sich halt nur irgendwann verselbständigt in der Diskussion, wie man das mit ZUGFeRD machen könnte.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten