2016-11-16 2 views
1

Ich versuche eine PDF/A-3b-Datei zu erstellen, die eine eingebettete XML-Datei enthält, die ZUGFeRD-konform ist. Ich benutze Perl und PDFLib für diesen Zweck. Die PDFLib Dokumentation gibt es nur für Java und PHP. Das Erstellen der PDF funktioniert gut, aber der XML-Teil ist mein Problem.So erstellen Sie virtuelles XML für ZUGFeRD-Rechnungen

Also, wie kann ich ein pvf von XML erstellen und diesem zu meinem pdf beitreten?

Dies ist, was PDFLib in Java empfiehlt:

// Place XML stream in a virtual PVF file 
String pvf_name = "/pvf/ZUGFeRD-invoice.xml"; 
byte[] xml_bytes = xml_string.getBytes("UTF-8"); 
p.create_pvf(pvf_name, xml_bytes, ""); 

// Create file attachment (asset) from PVF file 
int xml_asset = p.load_asset("Attachment", pvf_name, 
    "mimetype=text/xml description={ZUGFeRD invoice in XML format} " 
    + "relationship=Alternative documentattachment=true"); 

// Associate file attachment with the document 
p.end_document("associatedfiles={" + xml_asset + "}"); 

Also dachte ich, das Beispiel nehmen und sie passen Perl:

my $xmldata = read_file($xmlfile, binmode => ':utf8'); #I use example xml at the moment 

my $pvf_xml = "/pvf/ZUGFeRD-invoice.xml"; 
PDF_create_pvf($pdf, $pvf_xml, $xmldata, ""); #because no OOP i need to call it this way (works with all other PDF Functions) 

my $xml_invoice = PDF_load_asset("Attachment", $pvf_xml, "mimetype=text/xml " 
                 ."description={Rechnungsdaten im Zugferd-Xml-Format} " 
                 ."relationship=Alternative documentattachment=true"); 

PDF_end_document($pdf, "associatedfiles={".$xml_invoice."}"); 

In PHP Beispiele es ist auch nicht zu ByteArray konvertieren benötigt nach dem Lesen von XML. Weiter probiert es beim Auspacken aber scheint nicht das Problem zu sein.

Wenn ich mein Skript nenne ich bin nur immer:

Verbrauch: load_asset (Typ, Dateiname, optlist); bei signatur_test.pl Linie 41.

ich glaube, das Problem ist, dass pvf_xml nicht die Linie, bevor erstellt wird. Hat jemand das schon mal gemacht und nicht wie man das löst?

Antwort

1

Arg, ich fehlte nur das PDF-Handle in der load_asset Methode:

my $xml_invoice = PDF_load_asset($pdf, "Attachment", $pvf_xml, "mimetype=text/xml " 
                 ."description={Rechnungsdaten im Zugferd-Xml-Format} " 
                 ."relationship=Alternative documentattachment=true"); 

Auf diese Weise funktioniert.

Verwandte Themen