WPCubed Product Support

ZUGFeRD Einbettung

support

Hallo,

in dem wPDF manual (der PDF Datei) befindet sich aktualisierter Quellcode unter "Method AddXMPExtra (ZUGFerD)"

Hier ist es wichtig, sowohl das ZUGFeRD schema einzubauen als auch den Verweis auf ZUGFeRD-invoice.xml

#5 ♥ 0
12.5k Views 2 users read 3 min
support

Es gib inzwischen ein update welches das problem mit dem FeRD checker behebt - hier wurde der innerhalb der PDF in unicode codierte name nicht erkannt sodass er nun von wPDF als standard ANSI string geschrieben wird.

#4 ♥ 0

eben erst gelesen, vielen Dank!

Das werde ich sofort ausprobieren!

Ciao
Stefan

Edit:
Was ist InvoiceFile und was SchemaXML?
Ich glaube ich muss auf das Angebot mit dem Zusenden des Beispiels zurückgreifen ;-)

#3 ♥ 0
support

Hallo,

für ZUGFeRD ist erforderlich, dass auch die XMP Daten mittels AddXMPExtra angepasst werden.

Meine Demo macht das so:

var pdf : TWPPDFPrinter;
    res, i, a : Integer;
    mem : TMemoryStream;
begin
   pdf := TWPPDFPrinter.Create(self);
   //pdf.DebugMode := true;
   pdf.AutoLaunch := true;
   pdf.Filename :=
      ExtractFilePath(Application.ExeName) +
       'test.pdf';
   pdf.PDFAMode := wpdfaLevel3B;

   pdf.AddXMPExtra( SchemaXML.Text,
       StringReplace(
       InvoiceRefXML.Text, '@x@',
       InvoiceFile.Text, [rfReplaceAll])
       );

   pdf.BeginDoc;
   res := Screen.PixelsPerInch;
   pdf.AddFileAttachment(
     'ZUGFeRD-invoice.xml',
     'ZUGFeRD Rechnung',
     ExtractFilePath(Application.ExeName) +InvoiceName.Text );

   mem := TMemoryStream.Create;
   try
   Invoice.Lines.SaveToStream(mem);
   pdf.AddFileAttachment(
     InvoiceFile.Text,
     InvoiceFile.Text,
     mem );
   finally
     mem.Free;
   end;

   try
     pdf.StartPage(  Round(21 / 2.54 * res), Round(29.7 / 2.54 * res), res, res, 0 );
    pdf.Canvas.Rectangle(Rect(500,500, 600,600));
    pdf.Canvas.Font.Name := 'Arial';
    pdf.Canvas.TextOut(500,500, 'Nur ein Test');

     pdf.EndPage;
        finally
     pdf.EndDoc;
     pdf.Free;
   end;
end;

ich kann die demo gerne per E-Mail zusenden.

#2 ♥ 0

Hallo,

ich habe die Implementierung der ZUGFeRD - Einbettung einer Datei (in diesem Fall die ZUGFeRD XML) aus der Doku verwendet, leider melden beide verwendeten Testportale dass die Einbettung nicht korrekt ist:

(Zeilennummer) - Fehler / Hinweise


(0000) ZUGFeRD (PDF-Metadaten) Dateiname ist nicht korrekt.
(0000) ZUGFeRD (PDF-Metadaten) sind nicht vollständig.
(0000) Es konnte kein XML aus dem ZUGFeRD PDF extrahiert werden.

Benutzt habe ich folgenden Code:

procedure TForm1.Button2Click(Sender: TObject);
var
  sEXEPath: string;
  sXMLFullPath: string;
  sPDFFullPath: string;
  PDF: TWPPDFPrinter;
  bAttachedOK: boolean;
begin
  sEXEPath := ExtractFilePath(Application.ExeName) + '';
  sXMLFullPath := 'c:\temp\ZUGFeRD-invoice.xml';
  sPDFFullPath := 'c:\temp\RE_' + FormatDateTime('dd_mm_yyyy___hh_nn_ss',
    Now()) + '.pdf';
    WPDF_Start('*********', '************');
    PDF2.Filename := sPDFFullPath;
    PDF2.PDFAMode := wpdfaLevel3B;
    PDF2.PageMode := wpUseThumbs;
    PDF2.FontMode := wpEmbedType3;
    PDF2.BeginDoc();
    try
      // Add XML-Attachment
      bAttachedOK := PDF2.AddFileAttachment(ExtractFileName(sXMLFullPath),
        // Shown name
        'ZUGFeRD invoice in XML format', // Description
        sXMLFullPath, // FileName
        'text/xml', // MimeType
        0 // Modified Date
        );
      if bAttachedOK then
        showmessage('AddFileAttachment: OK')
      else
        showmessage('AddFileAttachment: ERROR');
      // <<<< :-( every time this message, but why?
      // Add Page with Text
      PDF2.StartPage(800, 1000, 72, 72, 0);
      PDF2.Canvas.Font.Name := 'Arial';
      PDF2.Canvas.Font.Size := 20;
      PDF2.Canvas.TextOut(10, 10, 'ZUGFeRD-Test (see XML attachment)');
      PDF2.EndPage();
    finally
      PDF2.EndDoc();
    end;
  showmessage('PDF file created' + #13#10 + sPDFFullPath);
end;

Dabei ist PDF2 ein TWPPDFExport auf dem Formular.

bAttachedOK ist true (nach einer Änderung der WPPDFR1.pas)

Gibt es hierfür bereits Lösungsansätze?

Ciao
Stefan

#1 ♥ 0