[gelöst] XML aus ZUGFeRD-PDF extrahieren
-
kirchfritz
- Beiträge: 279
- Registriert: Mo 3. Jan 2011, 13:34
- OS, Lazarus, FPC: Win11 (L 4.0 FPC 3.2.2)
- CPU-Target: 64Bit
- Wohnort: Nürnberg
[gelöst] XML aus ZUGFeRD-PDF extrahieren
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
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) 11-mal heruntergeladen
-
- 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) 349 mal betrachtet
Zuletzt geändert von kirchfritz am Di 1. Sep 2026, 13:50, insgesamt 1-mal geändert.
- 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
Guten Abend!
Ich hätte zwei weitere Möglichkeiten, nach denen du nicht gefragt hast.
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
Ich hätte zwei weitere Möglichkeiten, nach denen du nicht gefragt hast.
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
PDF-Dateien sind kodierte Textdateien. Du kannst, sie öffnen, z.B. mit TStringList, dann die Kodierte XML extrahieren und dekodieren:
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.
Re: XML aus ZUGFeRD-PDF extrahieren
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.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.
FreePascal kann nur https://github.com/LandrixSoftware/XRechnung-for-Delphi
Falls ich eine Lösung finde, würde ich sie in beide Repos einbauen
Re: XML aus ZUGFeRD-PDF extrahieren
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
paweld
Re: XML aus ZUGFeRD-PDF extrahieren
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
ich hab da mal was kleines gebaut, funktioniert mit Delphi und FreePascal
https://github.com/LandrixSoftware/XRec ... xtract.pas
-
kirchfritz
- Beiträge: 279
- 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
Ja genau, soweit war ich auch schon gekommen. fppdfparser kann PDF-Dateien lesen und parsen.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
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
Re: XML aus ZUGFeRD-PDF extrahieren
fppdfparser kann keine Anhänge auslesen.
-
kirchfritz
- Beiträge: 279
- 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
im Package fcl-pdf gibt es ein "examples"-Verzeichnis. Darin findet man den Quellcode für das Konsolenprogramm pdfdump
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? 
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;- 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
Ich schätze, du meinst das Beispiel aus dem Verzeichnis utils. Das ist aber ein ttfdump.lpr.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
...
- 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
Im Verzeichnis fcl-pdf/examples gibt es ein pdfdump.lpi (und pdfdump.pp)fliegermichl hat geschrieben: Di 1. Sep 2026, 10:57Ich schätze, du meinst das Beispiel aus dem Verzeichnis utils. Das ist aber ein ttfdump.lpr.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
...
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: XML aus ZUGFeRD-PDF extrahieren
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.
Ich hab die Unit gegen etwa 300 verschiedene E-Rechnungen laufen lassen, alle Anhänge wurden extrahiert. Also wenn was fehlt, gern Bescheid geben.
-
kirchfritz
- Beiträge: 279
- 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
OK, Du hast mich überzeugt, dass ich Deine Routine verwenden sollte.sh17 hat geschrieben: Di 1. Sep 2026, 11:28 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.
Ich habs mit folgendem Code probiert:
Code: Alles auswählen
procedure TForm1.ExtractWithLandrix;
var
out_xml : TBytes;
out_info : TXRechnungPdfExtractInfo;
attachment_name : UnicodeString;
begin
try
SynEdit1.Lines.Clear;
Invalidate;
Application.ProcessMessages;
if TXRechnungPdfExtractor.ExtractInvoiceFromFile(FilenameEdit1.Text,out_xml ,attachment_name,out_info) then
begin
ShowMessage('Extrahierung erfolgreich');
SynEdit1.Lines.LoadFromFile(attachment_name);
end
else
ShowMessage('Fehler:'#13#10);
finally
end;
end; -
kirchfritz
- Beiträge: 279
- 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
Jetzt funktionierts wunderbar:
Code: Alles auswählen
uses
intf.XRechnungPdfExtract;
procedure TForm1.ExtractInvoiceWithLandrix(aPDFFile : String);
var
out_xml : TBytes;
out_info : TXRechnungPdfExtractInfo;
attachment_name : UnicodeString;
procedure SaveBytesToFile(const FileName: string; const Data: TBytes);
var
FS: TFileStream;
begin
FS := TFileStream.Create(FileName, fmCreate);
try
if Length(Data) > 0 then
FS.WriteBuffer(Data[0], Length(Data));
finally
FS.Free;
end;
end;
begin
try
SynEdit1.Lines.Clear;
Invalidate;
Application.ProcessMessages;
if TXRechnungPdfExtractor.ExtractInvoiceFromFile(aPDFFile,
out_xml ,
attachment_name,
out_info) then
begin
SaveBytesToFile(attachment_name, out_xml);
SynEdit1.Lines.LoadFromFile(attachment_name);
end
else
ShowMessage('Fehler:'#13#10);
finally
end;
end;