XML aus ZUGFeRD-PDF extrahieren

Rund um die LCL und andere Komponenten
Antworten
kirchfritz
Beiträge: 277
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win11 (L 4.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

XML aus ZUGFeRD-PDF extrahieren

Beitrag von kirchfritz »

Hallo,

hat jemand ein Beispiel Programm, wie man mit Lazarus/FreePascal-Bordmittel (Package: fcl_pdf) eine XML-Datei aus einer ZUGFeRD-PDF extrahieren kann.

Bitte keine Antworten der Form:
"Ich weiß ja nicht wie das mit fcl_pdf geht, aber ich nehme dazu den JAVA-Aufruf aus dem Mustang-Projekt."
"Ich weiß ja nicht wie das mit fcl_pdf geht, aber ich nehme dazu PDFIUM.dll."
"Ich weiß ja nicht wie das mit fcl_pdf geht, aber ich nehme dazu Ghostscript."
"Ich weiß ja nicht wie das mit fcl_pdf geht, aber ich nehme dazu PDFTK."

Ich möchte explizit wissen, wie das mit dem FCL_PDF Package geht.

Viele Grüße aus Nürnberg
Fritz
Dateianhänge
EN16931_Elektron.pdf
Das ist meine ZUGFeRD-PDF
(1.05 MiB) 10-mal heruntergeladen
Hier sieht man, dass das PDF 3 Attachments hat, mich interessiert aber nur das factur_x.xml
Hier sieht man, dass das PDF 3 Attachments hat, mich interessiert aber nur das factur_x.xml
Screenshot 2026-08-30 195650.png (36 KiB) 289 mal betrachtet

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 458
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: XML aus ZUGFeRD-PDF extrahieren

Beitrag von Jorg3000 »

Guten Abend!
Ich hätte zwei weitere Möglichkeiten, nach denen du nicht gefragt hast. :lol:
Denn mit fcl_pdf (fpPDF) geht es meines Wissens nicht, weil es nur ein Writer ist.

Das Erste ist ein nagelneuer Pascal-nativer PDF-Reader, der vorletzten Monat wahrscheinlich von einem Sprachmodell unter Token-Qualen geboren wurde ...
https://github.com/Xelitan/PDF-Viewer-e ... rus-Delphi
Darin gibt es eine Unit PdfParser.pas - vielleicht kann sie mit XML-Einbettungen umgehen. Zur genauen Verwendung befragt man wahrscheinlich am besten auch ein LLM.

Als Zweites gibt es ein altes Projekt "ZUGFeRD-for-Delphi", das wohl nun FreePascal-kompatibel ist.
https://github.com/LandrixSoftware/ZUGFeRD-for-Delphi
Es kann explizit kein PDF-Attachment extrahieren, aber schon auf der Startseite findet man ein Beispiel: "You can use the PDFtk Server tool to extract the xml attachment from a pdf file".
Also genau das was du nicht willst, aber ich wollte es trotzdem hier erwähnt haben, weil es ein getesteter Weg zu sein scheint.

Grüße, Jörg

Soner
Beiträge: 813
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: XML aus ZUGFeRD-PDF extrahieren

Beitrag von Soner »

PDF-Dateien sind kodierte Textdateien. Du kannst, sie öffnen, z.B. mit TStringList, dann die Kodierte XML extrahieren und dekodieren:
Factur-x in PDF
Factur-x in PDF
factur-x-in-pdf.png (37.35 KiB) 241 mal betrachtet
Es sollen meistens flat-kodierte ZIP-Daten sein, in diesem Beispiel sieht man es auch, siehe "FlatDecode". Man müsste mit ZLib von FreePascal dekodieren können.

sh17
Beiträge: 18
Registriert: Mo 29. Jun 2026, 07:02
Kontaktdaten:

Re: XML aus ZUGFeRD-PDF extrahieren

Beitrag von sh17 »

Jorg3000 hat geschrieben: So 30. Aug 2026, 20:47 Als Zweites gibt es ein altes Projekt "ZUGFeRD-for-Delphi", das wohl nun FreePascal-kompatibel ist.
Das ist nicht alt, das ist top aktuell. FreePascal ist aber noch in Planung. Ich mach mir mal Gedanken, ob PDF-Extraktion möglich ist.

FreePascal kann nur https://github.com/LandrixSoftware/XRechnung-for-Delphi

Falls ich eine Lösung finde, würde ich sie in beide Repos einbauen

paweld
Beiträge: 119
Registriert: So 11. Jun 2023, 16:01
OS, Lazarus, FPC: Lazarus trunk, FPC fixes

Re: XML aus ZUGFeRD-PDF extrahieren

Beitrag von paweld »

Wenn Sie den FPC-Trunk/Main (3.3.1) verwenden, verfügt dieser über den fppdfparser, der das Einlesen von PDF-Dateien ermöglichen sollte – soweit ich weiß, generiert er zwar keine Vorschau, kann aber Text und in der PDF-Datei eingebettete Objekte extrahieren: https://gitlab.com/freepascal.org/fpc/s ... type=heads
Grüße / Pozdrawiam
paweld

sh17
Beiträge: 18
Registriert: Mo 29. Jun 2026, 07:02
Kontaktdaten:

Re: XML aus ZUGFeRD-PDF extrahieren

Beitrag von sh17 »

fppdfparser kann meines Wissens keine Anhänge auslesen.

ich hab da mal was kleines gebaut, funktioniert mit Delphi und FreePascal

https://github.com/LandrixSoftware/XRec ... xtract.pas

kirchfritz
Beiträge: 277
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win11 (L 4.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: XML aus ZUGFeRD-PDF extrahieren

Beitrag von kirchfritz »

paweld hat geschrieben: Mo 31. Aug 2026, 10:40 Wenn Sie den FPC-Trunk/Main (3.3.1) verwenden, verfügt dieser über den fppdfparser, der das Einlesen von PDF-Dateien ermöglichen sollte – soweit ich weiß, generiert er zwar keine Vorschau, kann aber Text und in der PDF-Datei eingebettete Objekte extrahieren: https://gitlab.com/freepascal.org/fpc/s ... type=heads
Ja genau, soweit war ich auch schon gekommen. fppdfparser kann PDF-Dateien lesen und parsen.
Allein mir fehlt ein Beispiel, wie ich mit fppdfparser die PDF-Attachments herauslesen kann.
Leichtverständlich ist das Ganze auch nicht gerade.
Deshalb meine Frage, wer hat das eventuell schon mal hingekriegt?

Viele Grüße aus Nürnberg
Fritz

sh17
Beiträge: 18
Registriert: Mo 29. Jun 2026, 07:02
Kontaktdaten:

Re: XML aus ZUGFeRD-PDF extrahieren

Beitrag von sh17 »

fppdfparser kann keine Anhänge auslesen.

kirchfritz
Beiträge: 277
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win11 (L 4.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: XML aus ZUGFeRD-PDF extrahieren

Beitrag von kirchfritz »

im Package fcl-pdf gibt es ein "examples"-Verzeichnis. Darin findet man den Quellcode für das Konsolenprogramm pdfdump

Code: Alles auswählen

procedure TPDFDumpApplication.Usage(Msg: String);
begin
  Writeln('Usage ',ExtractFileName(ParamStr(0)),' [options] FILE1 FILE2 ...');
  Writeln('Where options is one or more of:');
  Writeln('-h --help                This help text');
  Writeln('-c --pagecontent         Show page content stream (commands). Needs -p');
  Writeln('-d --dictionaries        Show object dictionaries. Needs -o');
  Writeln('-f --fonts               Show font info');
  Writeln('-i --info                Show document info');
  Writeln('-l --catalog             Show document catalog');
  Writeln('-n --pageno=N            Show only page N');
  Writeln('-o --objects             Show indirect objects');
  Writeln('-p --pages               Show pages');
  Writeln('-t --text                Show page text. Needs -p');
  Writeln('-v --verbose             Show warnings/extra info when parsing');
  Halt(Ord(Msg<>''));
end;
Sieht für mich so aus, als könnte man alles Mögliche aus einem PDF herauslesen. Zum Beispiel: fonts, dictionaries, pagecontent, catalog. Von Attachments ist jedenfalls nichts zu lesen. So gesehen hat mein Vorredner recht damit, dass fppdfparser keine Attachments extrahieren kann. Könnte es nicht trotzdem nur ein kleiner Schritt sein, hin zu Attachments? :)

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1822
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: XML aus ZUGFeRD-PDF extrahieren

Beitrag von fliegermichl »

kirchfritz hat geschrieben: Di 1. Sep 2026, 10:45 im Package fcl-pdf gibt es ein "examples"-Verzeichnis. Darin findet man den Quellcode für das Konsolenprogramm pdfdump
...
Ich schätze, du meinst das Beispiel aus dem Verzeichnis utils. Das ist aber ein ttfdump.lpr.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7429
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: XML aus ZUGFeRD-PDF extrahieren

Beitrag von af0815 »

fliegermichl hat geschrieben: Di 1. Sep 2026, 10:57
kirchfritz hat geschrieben: Di 1. Sep 2026, 10:45 im Package fcl-pdf gibt es ein "examples"-Verzeichnis. Darin findet man den Quellcode für das Konsolenprogramm pdfdump
...
Ich schätze, du meinst das Beispiel aus dem Verzeichnis utils. Das ist aber ein ttfdump.lpr.
Im Verzeichnis fcl-pdf/examples gibt es ein pdfdump.lpi (und pdfdump.pp)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

sh17
Beiträge: 18
Registriert: Mo 29. Jun 2026, 07:02
Kontaktdaten:

Re: XML aus ZUGFeRD-PDF extrahieren

Beitrag von sh17 »

Ganz so klein ist der Schritt nicht, schau gern mal in die von mir verlinkte Unit, da gibt es mehrere Varianten, wie eine pdf aufgebaut/verschlüsselt ist.
Ich hab die Unit gegen etwa 300 verschiedene E-Rechnungen laufen lassen, alle Anhänge wurden extrahiert. Also wenn was fehlt, gern Bescheid geben.

Antworten