[gelöst] ZUGFeRD PDF xml extrahieren

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Benutzeravatar
KoBraSoft
Beiträge: 125
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

[gelöst] ZUGFeRD PDF xml extrahieren

Beitrag von KoBraSoft »

Hallo,
ich will aus ZUGFeRD PDF Dateien die enthaltenen Daten (xml) extrahieren.
Es gab schon mal eine Diskussion viewtopic.php?p=94917#p94917 zum Thema ZUGFeRD. Brachte aber auch nicht viel erhellendes zum Thema.
Ich habe ein paar Rechnungen mit dem Hex Viewer unter die Lupe genommen und festgestellt dass die XML in die pdf am ende der Datei eingefügt wurde.
Bevor ich jetzt eine Routine schreibe die mir die xml extrahiert wollte ich fragen, ob es mittlerweile so was schon fertig gibt.

Kennt jemand eine Komponente die xml aus pdf extrahiert?

Konrad
Zuletzt geändert von KoBraSoft am Fr 24. Mai 2024, 12:46, insgesamt 1-mal geändert.
Konrad

www.KoBraSoft.de

Benutzeravatar
KoBraSoft
Beiträge: 125
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: ZUGFeRD PDF xml extrahieren

Beitrag von KoBraSoft »

Es ist vollbracht :-)
Ich kann jetzt die ZUGFeRD Daten (mit purem Pascal) aus pdf Rechnungen extrahieren. Besten Dank an rvk https://forum.lazarus.freepascal.org/in ... le;u=55059.
Anbei eine Demo. Diese Demo lässt ich nur mit trunk kompilieren, es hat in fcl-pdf wesentliche Fortschritte gegeben, die die Angelegenheit stark vereinfacht haben.

Verbesserungsvorschläge sind willkommen.

Konrad
Dateianhänge
Zugferd1.zip
(305.07 KiB) 111-mal heruntergeladen
Konrad

www.KoBraSoft.de

Joh
Lazarusforum e. V.
Beiträge: 293
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: [gelöst] ZUGFeRD PDF xml extrahieren

Beitrag von Joh »

ok...

wo liegt die Lösung für denjenigen, der nicht den trunk installieren will?
Das Problem an sich ist für mich interessant, aber noch lange nicht aktuell.

Also erer sowas wie: Die Daten liegen tatsächlich in einer xml im pdf unter ... versteckt; da kann man sie mit dem trunk auslesen.

thx
Joh
just my two Beer

Benutzeravatar
KoBraSoft
Beiträge: 125
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: [gelöst] ZUGFeRD PDF xml extrahieren

Beitrag von KoBraSoft »

:D
Joh hat geschrieben: Fr 24. Mai 2024, 23:12 wo liegt die Lösung für denjenigen, der nicht den trunk installieren will?
Das Beispielprogramm soll keine fertige Lösung sein. Es soll einen Weg zeigen wie es geht und anderen die Suche nach Informationen dazu vereinfachen. Das pdf Format und das ZUGFeRD Format sind gut dokumentiert, aber schwer verständlich (jedenfalls für mich :-) )
Mir fallen spontan drei Möglichkeiten ein. Man kann
  • die entsprechenden Dateien von trunk herunterladen und in das eigene Projekt einbunden
  • den Quellcode manuell anpassen
  • auf die nächste Lazarus Version warten
Das Problem an sich ist für mich interessant, aber noch lange nicht aktuell.
Ich sehe in freier Wildbahn immer häufiger ZUGFeRD, besonders im B2B Bereich. Für mich war das leider sehr aktuell.
Konrad

www.KoBraSoft.de

Joh
Lazarusforum e. V.
Beiträge: 293
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: [gelöst] ZUGFeRD PDF xml extrahieren

Beitrag von Joh »

Nee, so meinte ich das nicht...

Aktuell beschäftige ich mich etwas mit der pdf-Struktur und wollte eigentlich nur wissen, ob die Daten tatsächlich als komprimierte xml in einem Stream steht.

Zugferd ist gerade für mich nur als Idee; aktuell benötige ich nur die XRechnung.
Ich will nur erstmal eine Ahnung haben, wie es realisiert ist.
just my two Beer

Joh
Lazarusforum e. V.
Beiträge: 293
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: ZUGFeRD PDF xml extrahieren

Beitrag von Joh »

KoBraSoft hat geschrieben: Fr 24. Mai 2024, 12:23 Es ist vollbracht :-)
...
Verbesserungsvorschläge sind willkommen.

Konrad
[Download]
Aber wie bekomme ich das jetzt ans Laufen?

Code: Alles auswählen

uses fppdfobjects, fppdfparser...
wo finde ich die Units und wie binde ich die ein?

Edit: Also ich habe jetzt per fpcUpDeluxe die 3.4 heruntergeladen und hoffte, das die da drin sind.
just my two Beer

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6855
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: ZUGFeRD PDF xml extrahieren

Beitrag von af0815 »

Joh hat geschrieben: Do 13. Jun 2024, 13:08 Aber wie bekomme ich das jetzt ans Laufen?

Code: Alles auswählen

uses fppdfobjects, fppdfparser...
wo finde ich die Units und wie binde ich die ein?
Das sind Teile die in der FCL zu finden sind. fpcsource/packages/fcl-pdf/src aber die Source Pfade sind für Lazarus nicht so relevant, weil die ganze FCL vorkompiliert ist.

alles was mit fp anfängt kann man mal im Sourcezweig vom FPC suchen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
KoBraSoft
Beiträge: 125
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: ZUGFeRD PDF xml extrahieren

Beitrag von KoBraSoft »

Joh hat geschrieben: Do 13. Jun 2024, 13:08
wo finde ich die Units und wie binde ich die ein?
https://gitlab.com/freepascal.org/fpc/s ... type=heads > Code > Quellcode herunterladen und in einen Ordner entpacken
In Lazarus Projekt > Projektinspektor > hinzufügen > Dateien hinzufügen
und wenn ich mich recht erinnere, das selbe für
https://gitlab.com/freepascal.org/fpc/s ... ype=heads
Edit: Also ich habe jetzt per fpcUpDeluxe die 3.4 heruntergeladen und hoffte, das die da drin sind.
Ich hatte auch gehofft, dass das Programm mit 3.4 kompiliert. Tut es aber nicht. Die Leute von fpc sind wohl etwas konservativ mit Übernahme von Code von Trunk in die produktiv Version.
Der einfachste Weg ist meiner Meinung nach mit fpcUpDeluxe die trunk Version zu installieren. Mit fpcUpDeluxe lassen sich verschiedene Versionen (in getrennten Verzeichnissen) auf einem Rechner nebeneinander betreiben. Ich habe jedenfalls damit gute Erfahrungen gemacht. Lediglich mein Produktivsystem läuft alleine auf einem Rechner.
Konrad

www.KoBraSoft.de

Joh
Lazarusforum e. V.
Beiträge: 293
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: [gelöst] ZUGFeRD PDF xml extrahieren

Beitrag von Joh »

Ich hab mir dann doch mal die trunk-Version installiert...
Seit Lazarus 2.2.0 ist die gleiche fpc-Version (3.2.2) aktuell... Da hab' ich doch gar nicht drüber nachgedacht.

Mit der Trunc kompiliert es.
just my two Beer

Joh
Lazarusforum e. V.
Beiträge: 293
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: ZUGFeRD PDF xml extrahieren

Beitrag von Joh »

KoBraSoft hat geschrieben: Fr 24. Mai 2024, 12:23 Verbesserungsvorschläge sind willkommen.
Du gehst in deinem Code davon aus, das die xml komprimiert sein muß...
Meine erste Testdatei ist lt. veraPDF valide aber die xml ist nicht komprimiert.

Die PDF habe ich selbst erstellt, die xml auch und dann zusammengeführt mit Mustang.

ich hab' die pdf mal angehängt:
invoice.ZUGFeRD.pdf
(486.14 KiB) 84-mal heruntergeladen
just my two Beer

Joh
Lazarusforum e. V.
Beiträge: 293
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: [gelöst] ZUGFeRD PDF xml extrahieren

Beitrag von Joh »

und hier nochmal eine valide Datei als Anhang.

Diesmal habe ich die xml mit ghostscript eingefügt.
Interessanterweise wurde die Eingabedatei mit 488452 Bytes und die xml-Datei mit 6185 Bytes als Ausgabe auf 15555 Bytes zusammengeschrumpft.
Ich denke, da wurden unbenutzte Schriften etc. entfernt.
Trotzdem ist die Datei valide, funktioniert aber nicht mit deinem Tool.

ausgabe.pdf
(15.19 KiB) 58-mal heruntergeladen
wird ersetzt durch
invoice.GS.pdf
(14.82 KiB) 54-mal heruntergeladen
edit: Ausgabedatei ersetzt; ich hatte leider die Datei mit der flaschen PDF/a-Version angehängt...
Zuletzt geändert von Joh am Do 20. Jun 2024, 21:57, insgesamt 1-mal geändert.
just my two Beer

Benutzeravatar
KoBraSoft
Beiträge: 125
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: ZUGFeRD PDF xml extrahieren

Beitrag von KoBraSoft »

Joh hat geschrieben: Di 18. Jun 2024, 21:01
Du gehst in deinem Code davon aus, das die xml komprimiert sein muß...
Meine erste Testdatei ist lt. veraPDF valide aber die xml ist nicht komprimiert.
Das ist eine gültige pdf, aber deswegen noch keine gültige Zugferddatei. Ich habe bislang noch keine Zugferddatei mit unkomprimierten xml in freier Wildbahn gesehen. Mann müsste sich die Zugferd doku genau durchlesen, was dazu darin steht. Ich habe gerade leider keine Zeit dafür.
Konrad

www.KoBraSoft.de

Joh
Lazarusforum e. V.
Beiträge: 293
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: [gelöst] ZUGFeRD PDF xml extrahieren

Beitrag von Joh »

laut der beiden Offline-Validatoren für ZugFerd-PDFs (Mustang und VeraPDF) sind beide Dateien valide ZugFerd-Dateien.

Vielleicht hat hier ja jemand Zugriff auf die kostenpflichtigen Online-Validatoren und könnte beide Dateien mal dort checken.
just my two Beer

Benutzeravatar
KoBraSoft
Beiträge: 125
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: [gelöst] ZUGFeRD PDF xml extrahieren

Beitrag von KoBraSoft »

Joh hat geschrieben: Mi 19. Jun 2024, 12:22 und hier nochmal eine valide Datei als Anhang.
invoice.GS.pdf
Im examples Verzeichnis von fcl-pdf gibt es (in trunk) das Projekt pdfdump zur Analyse von pdf Dateien.

Code: Alles auswählen

pdfdump -odv  invoice.GS.pdf 
sagt:

Code: Alles auswählen

...
Error EPDF examining file "invoice.GS.pdf" : Dictionary entry Font is not a dictionary

Mustang Cli

Code: Alles auswählen

java -Xmx1G -Dfile.encoding=UTF-8 -jar Mustang-CLI-2.11.0.jar --no-notices --action validate --source invoiceGS.pdf 2>/dev/null
sagt:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>

<validation filename="invoiceGS.pdf" datetime="2024-06-23 09:25:09">
  <messages>
    <error type="1">File not found</error> 
  </messages>
  <summary status="invalid"/>
</validation>

Deine Datei scheint nicht in Ordnung zu sein.
Dennoch kann mein Programm (ich benutze Linux) die Datei ohne Fehlermeldung lesen
Dateianhänge
Bildschirmfoto_2024-06-23_09-48-28.png
Bildschirmfoto_2024-06-23_09-48-28.png (84.78 KiB) 3828 mal betrachtet
Konrad

www.KoBraSoft.de

Joh
Lazarusforum e. V.
Beiträge: 293
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: [gelöst] ZUGFeRD PDF xml extrahieren

Beitrag von Joh »

KoBraSoft hat geschrieben: So 23. Jun 2024, 09:40
Mustang Cli

Code: Alles auswählen

java -Xmx1G -Dfile.encoding=UTF-8 -jar Mustang-CLI-2.11.0.jar --no-notices --action validate --source invoiceGS.pdf 2>/dev/null
sagt:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>

<validation filename="invoiceGS.pdf" datetime="2024-06-23 09:25:09">
  <messages>
    <error type="1">File not found</error> 
  </messages>
  <summary status="invalid"/>
</validation>

lies doch mal die Fehlermeldung: invoiceGS.pdf: File not found

Die Datei heißt: invoice.GS.pdf
just my two Beer

Antworten