ZUGFeRD-Export

Zur Vorstellung von Komponenten und Units für Lazarus
Antworten
Joh
Lazarusforum e. V.
Beiträge: 306
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

ZUGFeRD-Export

Beitrag von Joh »

Moin,
ich habe ein Beispielprojekt erstellt, mit dem ich eine ZUGFeRD-Rechnung mit Lazarus erstellen kann.

Für den PDF-Export muß
- pack_powerpdf eingebunden werden. Außerdem muß das Verzeichnis
<lazarus-Verzeichnis>\components\lazreport\source\addons\pdfexport\
in den Pfad eingebunden werden. Dort befindet sich die Datei lr_e_pdf.pas, die für den PDF-Export aus Lazreport zuständig ist.
(Keine Ahnung, warum sich diese Datei nicht im Package lazreport befindet. lr_e_csv.pas für den csv-Export, lr_e_htm.pas für den html-Export sind drin...)

Für die Zusammenführung von pdf und xml-Datei nutze ich ein externes Postscript-Script, welches jeder Ghostscript-Installation beiliegt.
Außerdem steht im Hintergrund eine Firebird-Datenbank.

Für beide Sachen habe ich die entsprechenden Dateien dem Projekt beigefügt, so das das Projekt unter Windows 64bit direkt lauffähig sein müsste.
Unter Linux sollten die Laufzeitkomponenten von Firebird und Ghostscript ausgetauscht werden.

externe Dateien:

Code: Alles auswählen

# Ghostscript-Runtime 64-bit
gswin64.exe          - Ghostscript
gsdll64.dll          - Ghostscript dll
COPYING              - Ghostscript-Lizenz

# Firebird 4-Runtime 64-bit
fbclient.dll         - Firebird-Client
ib_util.dll          - Firebird 
IDPLicense.txt       - Firebird-Lizenz
plugins
plugins\engine13.dll
Ich habe in dem Projekt den ZUGFeRD-Export in vier Schritte aufgeteilt:

i) der PDF-Export
via TfrReport.ExportTo()
- erstellt die Datei invoice.pdf, eine Standard-PDF-Datei mit den visuellen Komponenten

ii) der xml-Export
manuelle Erstellung der xml-Datei mittels TXMLDocument und TDOMNode
(man könnte auch writeln(f, '') nehmen, aber TXMLDocument nimmt etwas Kontrolle ab.
- erstellt die Datei factur-x.xml mit den Rechnungsdaten, die in der PDF eingebettet wird.

iii) Ghostscript-Batch
die Zusammenführung pdf und xml; Erstellung einer PDF/A3-Datei nach dem ZUGFeRD-Standard
- hierzu wird die externe Komponente aus dem Ghostscript-Projekt genutzt.
Im Projekt eingebunden werden dazu
- gs-create.bat - Batchdatei mit Ghostscript-Aufruf
- zugferd.ps - das eigentliche Postscript-Script
- srgb.icc - icc-Profil für die pdf/A3-Datei


iv) Optional: Outlook/TB-Versand
Versand der ZUGFeRD-Rechnung per eMail.
- für die Mailerstellung muß Synapse in den ProjektPfad eingetragen werden: <synapse-Verzeichnis>\source\lib\
- hierzu wird mittels Ararat-Synapse eine eMail erstellt. Diese wird aber nicht versandt, sondern als eml-Datei gespeichert.
- Ein Aufruf dieser eml-Datei mit OpenDocument() startet dabei den aktuellen eMail-Client.
(getestet mit Thunderbird, Betterbird, Outlook 2013-2022 Classic)
Das "neue Outlook" :-( sollte genausowenig funktionieren wie der Outlook WebClient.

Rechnung.zip
(269.92 KiB) 228-mal heruntergeladen
Firebird-Win.zip
(3.31 MiB) 222-mal heruntergeladen
die beiden notwendigen Ghostscript-Dateien konnte ich aufgrund der Größe nicht hochladen und habe sie gezippt:
http://klostersch.de/daten/lazarus-foru ... pt-Win.zip

hier das Original:
Ghostscript: https://ghostscript.com/releases/gsdnld.html
just my two Beer

Benutzeravatar
KoBraSoft
Beiträge: 128
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-Export

Beitrag von KoBraSoft »

Tolles Projekt, das ist genau was ich auch machen wollte. Bin aber bisher noch nicht dazu gekommen.
Ich bin dabei es unter Linux zum laufen zu bekommen.
Ich habe dazu ein Debian 13 (RC2) aufgesetzt und die notwendigen Bibliotheken und Programme installiert (Firebird Server, Lazarus, ...)
Ein paar Kleinigkeiten waren am Code zu ändern zB einen "\" durch DirectorySeparator ersetzen, die Datenbankpfade anpassen und die ShellApi auskommentieren (muss ich später noch durch TProzess ersetzen).
Die beiliegende Batch datei habe ich nach bash geändert. Momentan muss ich GhostScript noch in der Konsole aufrufen.

Code: Alles auswählen

gs --permit-file-read=./ -sDEVICE=pdfwrite -dPDFA=3 -sColorConversionStrategy=RGB -sZUGFeRDXMLFile=./factur-x.xml -sZUGFeRDProfile=./srgb.icc -sZUGFeRDVersion=2p1 -sZUGFeRDConformanceLevel="EN 16931" -o ./invoice.GS.pdf ./zugferd.ps ./Invoice.pdf
Ghostscript antwortet:

Code: Alles auswählen

GPL Ghostscript 10.05.1 (2025-04-29)
Copyright (C) 2025 Artifex Software, Inc.  All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Processing pages 1 through 1.
Page 1
Loading font Helvetica (or substitute) from /usr/share/ghostscript/10.05.1/Resource/Font/NimbusSans-Regular
Loading font Helvetica-Bold (or substitute) from /usr/share/ghostscript/10.05.1/Resource/Font/NimbusSans-Bold
Das hört sich gut an. Es wird auch eine Datei mit dem Namen invoice.GS.pdf erzeugt. Leider ist die Datei keine gültige Zugferd datei.
Anbei die erzeugte Datei.
invoice.GS.pdf
(20.76 KiB) 66-mal heruntergeladen
Hat jemand eine Idee woran das liegen könnte?
Konrad

www.KoBraSoft.de

Soner
Beiträge: 745
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: ZUGFeRD-Export

Beitrag von Soner »

KoBraSoft hat geschrieben: Sa 5. Jul 2025, 14:49 ...
Hat jemand eine Idee woran das liegen könnte?
Die letzte Version von vor ein Paar Monaten war fehlerhaft, ich hatte das hier erwähnt, vielleicht hast du die fehlerhafte Version erwischt.

Übrigens die beste Lösung ist die Unit von Jörg in Verbindung mit Pdfium zu benutzen. Da braucht man keine externe Programme.

Benutzeravatar
KoBraSoft
Beiträge: 128
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-Export

Beitrag von KoBraSoft »

Soner hat geschrieben: Sa 5. Jul 2025, 22:18 Die letzte Version von vor ein Paar Monaten war fehlerhaft, ich hatte das hier erwähnt, vielleicht hast du die fehlerhafte Version erwischt.
Ich habe den Fehler gefunden. Offensichtlich mag GS keine relativen Pfade. Mit

Code: Alles auswählen

gs
--permit-file-read=/home/ko/lazprojekte/Rechnung/
-sDEVICE=pdfwrite
-dPDFA=3
-sColorConversionStrategy=RGB
-sZUGFeRDXMLFile=/home/ko/lazprojekte/Rechnung/factur-x.xml
-sZUGFeRDProfile=/home/ko/lazprojekte/Rechnung/srgb.icc
-sZUGFeRDVersion=2p1
-sZUGFeRDConformanceLevel=BASIC
-o /home/ko/lazprojekte/Rechnung/invoice1.GS.pdf
/home/ko/lazprojekte/Rechnung/zugferd.ps
/home/ko/lazprojekte/Rechnung/Invoice.pdf

klappt es.
Übrigens die beste Lösung ist die Unit von Jörg in Verbindung mit Pdfium zu benutzen. Da braucht man keine externe Programme.
Die Unit von Jörg ist toll, das ist keine Frage. Ich habe das Beispiel von Joh noch nicht genau untersucht, aber auf den ersten Blick verwendet er einen ähnlichen (wenn nicht gar den) Code wie Jörg. Zu Pdfium habe ich (auf die Schnelle) nur gefunden, dass es einen Wrapper von Andreas Hausladen https://github.com/ahausladen/PdfiumLib für Delphi gibt.
Ich habe nichts gefunden (aber auch nicht getestet) ob PdfiumLib mit Lazarus und Linux läuft. Es ist jedoch eine externe lib (pdfium.dll oder pdfium.so) notwendig. Offensichtlich verwendet Fastreport Pdfium. Kennt jemand ein Beispielprojekt für Lazarus mit pdfium und ZugFerd?


Die (für mich) großen Vorteile des Beispiels von Joh sind:
+ Automatische Erzeugung der pdf Rechnungsdateien aus Datenbankdaten über Lazreport
+ Automatische Erzeugung der xml aus Datenbankdaten
+ Der Aufwand das Beispiel nach Linux umzustellen ist überschaubar
+ Ghostscript ist bei Linux standardmäßig installiert (jedenfalls unter Debian und Ubuntu) Es braucht also kein externes Programm oder lib mitgeliefert werden.
++ Vieles davon setze ich in ähnlicher Form (Incl Firebird) in meinen Projekten bereits ein. Ich brauche also meine bisherigen Projekte nur geringfügig zu erweitern. :D
Konrad

www.KoBraSoft.de

kirchfritz
Beiträge: 234
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-Export

Beitrag von kirchfritz »

Frage an Joh:

Geht das ganze auch ohne LazarusReport?
Meine Rechnungsdaten liegen zum Beispiel schon im XML-Format (nicht ZUGFeRD-XM) oder im JSON-Format vor.
Ich habe also nicht unbedingt eine Datenbank als Ausgangslage für LazarusReport.
Lassen sich die Rechnungs-PDFs nicht mit Freepascal Boardmitteln zu PDF wandeln?
Braucht man dazu zwangsweise eine Datenbank in Verbindung mit LazarusReport?

ChatGPT hat mir vorgeschlagen, JSON-Dateien in ein TBufDataset zu wandeln und dieses TBufDataset dann mit LazarusReport verknüpfen.
Klappt schon irgendwie, nur das Erstellen/Designen des Reports ist schwierig, weil die Dataset-Felder erst zur Laufzeit und nicht zur Designzeit zur Verfügung stehen.

Grüße aus Nürnberg
Fritz

Benutzeravatar
Zvoni
Beiträge: 412
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: ZUGFeRD-Export

Beitrag von Zvoni »

Ich glaube paweld hat auch nen Wrapper für pdfium geschrieben
siehe auch: https://forum.lazarus.freepascal.org/in ... #msg432524

zu pdfium generell: mWn gibt es nur die Windows-DLL FERTIG zum download.
Für *nixe muss man die ".so" selbst kompilieren
(glaub ich zumindest)
Anleitung hier: https://pdfium.googlesource.com/pdfium/
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

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

Re: ZUGFeRD-Export

Beitrag von paweld »

Zvoni hat geschrieben: Mo 7. Jul 2025, 13:19 Ich glaube paweld hat auch nen Wrapper für pdfium geschrieben
siehe auch: https://forum.lazarus.freepascal.org/in ... #msg432524
Ich bin nicht der Autor dieses Wrappers. Es ist eine leicht modifizierte ältere Version dieser Komponente: https://github.com/ahausladen/PdfiumLib
Grüße / Pozdrawiam
paweld

kirchfritz
Beiträge: 234
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-Export

Beitrag von kirchfritz »

Soner hat geschrieben: Sa 5. Jul 2025, 22:18
KoBraSoft hat geschrieben: Sa 5. Jul 2025, 14:49 ...
Hat jemand eine Idee woran das liegen könnte?
Die letzte Version von vor ein Paar Monaten war fehlerhaft, ich hatte das hier erwähnt, vielleicht hast du die fehlerhafte Version erwischt.

Übrigens die beste Lösung ist die Unit von Jörg in Verbindung mit Pdfium zu benutzen. Da braucht man keine externe Programme.
Frage an @soner: Was hat die Unit von Jörg mit PDFium zu tun? Meines Wissens ist PDFium zum PDF anschauen gut geeignet, zum PDF erstellen habe ich PDFium noch nicht kennengelernt.
Das PDF anzeigen interessiert mich nicht, wie man das PDF erstellen kann, wäre wichtiger!
Fritz

Benutzeravatar
KoBraSoft
Beiträge: 128
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-Export

Beitrag von KoBraSoft »

kirchfritz hat geschrieben: Mo 7. Jul 2025, 13:02 Frage an Joh:

Geht das ganze auch ohne LazarusReport?
Ich bin zwar nicht gefragt, antworte trotzdem :)
Hier https://www.freepascal.org/~michael/art ... lazpdf.pdf gibt es eine ausführliche Anleitung. Die notwendigen Komponenten sind bei fpc in packages/fcl-pdf dabei.
Konrad

www.KoBraSoft.de

Joh
Lazarusforum e. V.
Beiträge: 306
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-Export

Beitrag von Joh »

kirchfritz hat geschrieben: Mo 7. Jul 2025, 13:02 Frage an Joh:

Geht das ganze auch ohne LazarusReport?
Meine Rechnungsdaten liegen zum Beispiel schon im XML-Format (nicht ZUGFeRD-XM) oder im JSON-Format vor.
Ich habe also nicht unbedingt eine Datenbank als Ausgangslage für LazarusReport.
Lassen sich die Rechnungs-PDFs nicht mit Freepascal Boardmitteln zu PDF wandeln?
Braucht man dazu zwangsweise eine Datenbank in Verbindung mit LazarusReport?

ChatGPT hat mir vorgeschlagen, JSON-Dateien in ein TBufDataset zu wandeln und dieses TBufDataset dann mit LazarusReport verknüpfen.
Klappt schon irgendwie, nur das Erstellen/Designen des Reports ist schwierig, weil die Dataset-Felder erst zur Laufzeit und nicht zur Designzeit zur Verfügung stehen.

Grüße aus Nürnberg
Fritz
Also eine PDF mit Boardmitteln erzeugen ist kein Hexenwerk...
Ich mache das gerne händisch mit libjpfpdf (die ich für mich manuell erweitert habe). Warum sollte man dann eine Datenbank benutzen.

Warum möchtest du dann Lazreport verwenden, wenn vorgegeben ist, was auszugeben ist.
Ich habe nur Lazreport mit Datenbank als Beispiel genommen, weil es für die meisten Leute halt der Standardablauf ist:

- Daten in Datenbank
- Bericht
- Rechnung
- ZUGFeRD

Wenn du ein bestimmtes (Rechnungsformular) händisch erzeugen möchtest, sag Bescheid.
Mein erstes Lazarus-Projekt bestand darin, Formulare (Betriebsanweisungen) händisch zu erstellen...

lg
Joh

PPS: keine Ahnung, was Chat-... dazu sagen würde; ich kenne diese Helferlein nicht und versuche sie zu Ignorieren.
just my two Beer

kirchfritz
Beiträge: 234
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-Export

Beitrag von kirchfritz »

@Joh: Gut, dann habe ich es jetzt so verstanden:

Für die ZUGFeRD-PDF-Erstellung benutzt Du LazarusReport, weil die Rechnungsdaten aus einer Datenbank kommen und sich deshalb LazarusReport anbietet.
Und das ist auch gut so!!

Meine Gedanken waren aber, dass ich blöderweise keine Datenbank habe und eventuell trotzdem LazarusReport kennen- und liebenlernen wollte.

Du schreibst, dass Du PDF-Rechnungen mit libjpdf händisch erstellst.
Das habe ich auch schon untersucht. Nun muss ich aber neben den Systemschriften auch noch andere Schriften verwenden (tja, Kundenwunsch ist heilig).
Und genau dies ging mit libjpdf nicht, wenn ich mich nicht irre!

Kannst Du mir da weiterhelfen?

Gruß
Fritz

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

Re: ZUGFeRD-Export

Beitrag von paweld »

@kirchfritz - Daher sind Berichte meiner Meinung nach die beste Lösung für solche Dinge. LazReports ist nur eine von mehreren Möglichkeiten (meiner Meinung nach die beste unter den kostenlosen Lösungen). Andere kostenlose Lösungen sind fpReports und Fortes Reports.
Und es ist auch nicht so, dass man eine Datenbank haben muss, um Berichte zu erstellen. Sie können Daten als Parameter an den Bericht übergeben (in den Berichtsnamen tippen Sie zwischen [ und ] und im OnGetValues-Ereignis übergeben Sie die entsprechenden Daten basierend auf dem Parameternamen) und/oder UserDataSet verwenden, an das wir Arrays, Listen usw. übergeben können.
Später können Sie diesen Bericht ausdrucken, in eine Datei (pdf [mit fppdf, PowerPDF oder Cairo], Bilddatei, Tabellenkalkulation) exportieren oder auf dem Bildschirm anzeigen.
Darüber hinaus können Sie einen Editor bereitstellen, mit dem der Kunde das Aussehen des Berichts selbst bearbeiten kann.
Dateianhänge
lr-userdataset.7z
(29.25 KiB) 41-mal heruntergeladen
lr-params.zip
(5.11 KiB) 41-mal heruntergeladen
Grüße / Pozdrawiam
paweld

charlytango
Beiträge: 1098
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: ZUGFeRD-Export

Beitrag von charlytango »

kirchfritz hat geschrieben: Di 8. Jul 2025, 10:09 Meine Gedanken waren aber, dass ich blöderweise keine Datenbank habe und eventuell trotzdem LazarusReport kennen- und liebenlernen wollte.
Du kannst in Lazreport mittels der Unit LR_CodeReport (findet sich im Lazreport Verzeichnis) deinen Report selber im Code zeichnen.
Ganz nach deinem Gusto mit oder ohne Datenbank.

@paveld hat mir da auf die Sprünge geholfen und dessen Beispielprojekt hänge ich mal an. (danke an dieser Stelle nochmal an @paveld)

Alle Reportobjekte kann man auch selber zeichnen und mit beliebigem Inhalt befüllen bzw anschließend als PDF exportieren.


Edit: und wieder war @paveld schneller;-)
Dateianhänge
Project1.zip
(7.29 KiB) 40-mal heruntergeladen

Soner
Beiträge: 745
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: ZUGFeRD-Export

Beitrag von Soner »

kirchfritz hat geschrieben: Mo 7. Jul 2025, 14:50
Soner hat geschrieben: Sa 5. Jul 2025, 22:18
KoBraSoft hat geschrieben: Sa 5. Jul 2025, 14:49 ...
Hat jemand eine Idee woran das liegen könnte?
Die letzte Version von vor ein Paar Monaten war fehlerhaft, ich hatte das hier erwähnt, vielleicht hast du die fehlerhafte Version erwischt.

Übrigens die beste Lösung ist die Unit von Jörg in Verbindung mit Pdfium zu benutzen. Da braucht man keine externe Programme.
Frage an @soner: Was hat die Unit von Jörg mit PDFium zu tun? Meines Wissens ist PDFium zum PDF anschauen gut geeignet, zum PDF erstellen habe ich PDFium noch nicht kennengelernt.
Das PDF anzeigen interessiert mich nicht, wie man das PDF erstellen kann, wäre wichtiger!
Fritz
Mit PDFium kannst du alles anstellen, nicht nur anzeigen. Mir Jörgs Unit erzeugt man XML-Datei und z.B. mit Lazreport PDF-Datei und läßt sich beides mit PDFium zusammenfügen, wie bei Ghostscript. Ich würde gerne ein Beispiel posten aber habe keine Zeit, deshalb werde ich aus meinem Programm Quelltext zeigen, damit müsste das jeder schaffen, man kann das sogar ohne Datei mit Memorystream erledigen. Falls Fragen dazu gibt sollten wir vielleicht neues Thema eröffnen, damit Johs Thema nicht gekapert wird.

Beachtet Kommentare:

Code: Alles auswählen

uses PdfiumCore; //man braucht nur das, ihr braucht pdfium nicht zu installieren.

// AReport: hier ist die Rechnung als Lazreport, Es hat mit Lazreport nichts zu tun, man könnte auch direkt PDF-Übergehen.
// AZfXmlAsStr: hier liegt die E-Rechnung als XML-String,  erstellt mittels Jörg unit.
procedure RepSaveRepAsPdf(aDocArt:Integer; AKdnr, aId: String; AReport: TfrReport; AZfXmlAsStr: String='');
var ...
    ms : TMemoryStream;
    {$IFDEF PDFIUM2}
    aAttach: TPdfAttachment;
    aAttName: string;
    fDoc1: TPdfDocument;
    fAttach: TPdfAttachmentList;
    aMsg: string;
    {$ENDIF PDFIUM2}
begin
  ...
  ms:=TMemoryStream.Create;
 try
  AReport.ExportTo(TFrTNPDFExportFilter, ms);

  {$IFDEF PDFIUM2}
  if (aDocArt=gAtArtRechnung)or(aDocArt=gAtArtSammelrechnung) then begin
    aMsg:='';
    ms.Position:=0;
    fDoc1:= TPdfDocument.Create;
    fDoc1.LoadFromStream(ms);
    aAttName:='factur-x.xml';
    fAttach:=fDoc1.Attachments;
    try
      aAttach:=fAttach.Add(aAttName);
      try
       aAttach.SetContent(AZfXmlAsStr);
      except
        on E: Exception do aMsg:='Fehler beim laden von Attachment: '+E.Message+LineEnding;
      end;
    except
      on E: Exception do aMsg:=aMsg+'Fehler beim hinzufügen von Attachment: '+E.Message+LineEnding;
    end;
    try
     fDoc1.SaveToStream(ms, dsoRemoveSecurity, 17);
    except
     on E: Exception do aMsg:=aMsg+'Fehler beim Speichern : '+E.Message+LineEnding;
    end;
    if aMsg<>'' then ShowMessage(aMsg);
  end
  else fDoc1:=nil;
  {$ENDIF PDFIUM2}  
  // jetzt liegt die E-Rechnung mit als PDF inklusive XML-Datei in Stream ms
  // ihr könnt es als Datei oder in die DB speichern.
  //...

Antworten