ZUGFeRD XML in pdf einfügen: Neuer Ansatz

Zur Vorstellung von Komponenten und Units für Lazarus
Antworten
Benutzeravatar
KoBraSoft
Beiträge: 123
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

ZUGFeRD XML in pdf einfügen: Neuer Ansatz

Beitrag von KoBraSoft »

Hallo,
ich hatte mir das so schön vorgestellt: (Mit dem Wissen, dass das für mich nicht einfach wird.)
  • pdf Datei ( oder Stream) in TPDFDocument laden
    • erfolgreich
  • xml stream packen
    • erfolgreich
  • gepackten xml stream als TPdfIndirect in TPDFDocument hinzufügen
    • erfolgreich, zumindest der Compiler frist es
  • TPDFDocument als pdf Datei ( oder Stream) speichern
    • fehlgeschlagen
Für die ersten drei Punkte habe ich die unit fppdfobjects verwendet. Da aber in der unit fppdfobjects keine Möglichkeit zum speichern des TPDFDocuments gefunden habe, hatte ich gehofft TPDFDocument.SaveToStream oder TPDFDocument.SaveToFile von der unit fppdf verwenden zu können.
Leider sind TPDFDocument aus der unit fppdfobjects und TPDFDocument aus der unit fppdf extrem verschieden.
TPDFDocument aus der unit fppdfobjects in TPDFDocument aus der unit fppdf zu konvertieren oder ein procedure SaveToStream für fppdfobjects zu schreiben liegen weit außerhalb meiner Fähigkeiten.
Da ich diesen Ansatz (für mich) gescheitert sehe, werde ich ihn nicht weiterverfolgen. (Außer jemand von euch hat eine Lösung)

Ich habe deshalb nochmal Grundlagenforschung betrieben und habe zwei weitere Kandidaten gefunden:
  • SynPDF scheint hoch entwickelt zu sein und aktiv weiterentwickelt zu werden. Habe jedoch (auf die Schelle) keine Möglichkeit gefunden, pdf Dateien zu laden
  • PowerPDF wird im Exportfilter lr_e_pdf in pdfexport in lazreport verwendet. Den Exportfilter setze bereits ein um Rechnungen, die ich mit Lazreport generiere, als pdf Datei zu speichern. PowerPDF kennt den ObjectType otIndirectObject.
Welchen Weg würde ihr vorschlagen?
Zuletzt geändert von KoBraSoft am Sa 4. Jan 2025, 14:42, insgesamt 1-mal geändert.
Konrad

www.KoBraSoft.de

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

Re: ZUGFeRD XML in pdf einfügen: Ist mein Ansatz zum Scheiteren verurteilt?

Beitrag von kirchfritz »

Ich schlage den PDFIUM Weg vor:

Code: Alles auswählen

program xml_einbetten;

{$mode objfpc}{$H+}

uses
  Classes, SysUtils,
  Interfaces,
  pdfiumcore;

procedure AttachFile(aAttachmentFilename,
                     aSourcePDFFilename,
                     aDestPDFFilename     : String);
var
  pdf1 : TPDFDocument;
  att: TPdfAttachment;
begin
  pdf1 := TPDFDocument.Create;
  try
    pdf1.LoadFromFile(aSourcePDFFilename);
    att := pdf1.Attachments.Add(aAttachmentFilename);
    att.LoadFromFile(aAttachmentFilename);
    pdf1.SaveToFile(aDestPDFFilename);
  finally
   FreeAndNil(PDF1);
  end;
end;

begin
  Writeln('attaching factur-x.xml to test.pdf ..... ');
  AttachFile('factur-x.xml','test.pdf','test_mit_attachment.pdf');
  if FileExists('test_mit_attachment.pdf') then
     Writeln('output created: ','test_mit_attachment.pdf')
  else
     Writeln('Oops! Irgendwas ist schiefgelaufen.');
  Writeln('Press <enter> to continue...');
  Readln;
end.    
Code im Anhang!
Dateianhänge
xml_einbetten.zip
(2.82 MiB) 101-mal heruntergeladen

Benutzeravatar
KoBraSoft
Beiträge: 123
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 XML in pdf einfügen: Ist mein Ansatz zum Scheiteren verurteilt?

Beitrag von KoBraSoft »

kirchfritz hat geschrieben: Fr 3. Jan 2025, 13:54 Ich schlage den PDFIUM Weg vor:
Danke für den Hinweis. PDFIUM kannte ich noch nicht, scheint sehr aktiv weiterentwickelt zu werden. Das wäre dann Plan C. Plan B ist ghostscript ( Für das es auch einen fp Wrapper gibt.)

Mein aktueller Plan A ist eine eigene Funktion zuschreiben, die das erledigt. Ich bin aber noch mit Grundlagenforschung beschäftigt:
Ich habe mir zu diesem Zweck das Beispiel BASIC_Einfach.pdf aus der Zugferd Doku vorgenommen.
Für mich schaut es so aus als hätten die das Zugferd einfach an eine stinknormale pdf dran gehängt. Aber auch offensichtlich in der existierenden pdf rumgefingert

Es gibt nähmlich %%EOF zweimal, einmal in Zeile 1372 und nochmal am Ende der Datei auf Zeile 1567
Hier das Ende der Datei:
Bildschirmfoto_2025-01-04_13-51-21.png
Bildschirmfoto_2025-01-04_13-51-21.png (46.03 KiB) 2259 mal betrachtet
Und hier das (vermutliche) Ende der ursprünlichen pdf Datei:
Bildschirmfoto_2025-01-04_13-50-55.png
Bildschirmfoto_2025-01-04_13-50-55.png (69.45 KiB) 2259 mal betrachtet
Die ursprüngliche Datei hatte 21 Elemente. Die erste Zahl in der xref Liste ist die absolute Pos des Elements in der Datei. Hier zB das 17. Element "0000132370"
Bildschirmfoto_2025-01-04_14-04-22.png
Bildschirmfoto_2025-01-04_14-04-22.png (36.51 KiB) 2259 mal betrachtet
Die neue Datei hat 6 Elemente mehr, wovon 2 ersetzt werden Element 17 und 18
Das neue Element 17 hat die Adresse "0000144991"
Das Element 23 enthält die XRechnung gepackt.

Für mich schaut es momentan so aus als würde es nicht genügen einfach nur eine XRechnung an ein pdf anzuhängen.
Es müssen wohl auch noch andere Elemente geändert bzw angehängt werden.
Kann mir jemand bitte eine Zugferd Muserrechnung die mit ghostscript oder etwas anderem erstellt wurde (und möglichest valide ist) und die zugehörige original pdf Datei zukommen lassen.
Konrad

www.KoBraSoft.de

VB_Lazarus
Beiträge: 99
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit

Re: ZUGFeRD XML in pdf einfügen: Neuer Ansatz

Beitrag von VB_Lazarus »

Hi,
ich habe das Beispiel (PDF) von kirchfritz genommen und eine Original xml (Beispiel aus ZugFerd) Datei angehängt.
Bei der Validierung (https://erechnungs-validator.de/) war alles ok.
Ich bin der Meinung, das nur die xml Datei validiert wird und die PDF wird nicht berücksichtigt.
Bei Heise wurde dies auch diskutiert.

Gruß

Benutzeravatar
KoBraSoft
Beiträge: 123
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 XML in pdf einfügen: Neuer Ansatz

Beitrag von KoBraSoft »

VB_Lazarus hat geschrieben: Sa 4. Jan 2025, 16:43 Hi,
ich habe das Beispiel (PDF) von kirchfritz genommen und eine Original xml (Beispiel aus ZugFerd) Datei angehängt.
Bei der Validierung (https://erechnungs-validator.de/) war alles ok.
Kannst Du mir das schicken. Ich würde es mir gerne genauer anschauen.
Ich bin der Meinung, das nur die xml Datei validiert wird und die PDF wird nicht berücksichtigt.
Bei Heise wurde dies auch diskutiert.
Schicke mir bitte einen Link darauf.
Konrad

www.KoBraSoft.de

VB_Lazarus
Beiträge: 99
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit

Re: ZUGFeRD XML in pdf einfügen: Neuer Ansatz

Beitrag von VB_Lazarus »

Heise Podcast:
https://www.heise.de/news/Passwort-Folg ... 95829.html

Die xml Datei habe ich von EN16931_Einfach genommen und einfach an die PDF wie von kirchfritz im Beispiel gezeigt angehängt.
Wenn du die PDF im Validator hochlädst, kannst du die die xml visualisieren lassen.
Dateianhänge
factur-x.xml
(13.08 KiB) 78-mal heruntergeladen
test.PDF
(82.96 KiB) 79-mal heruntergeladen
test_mit_attachment.pdf
(86.8 KiB) 75-mal heruntergeladen

Antworten