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
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
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.
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 ;-)
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.
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