2016-11-16 35 views
1

我嘗試創建一個包含嵌入式XML文件的PDF/A-3b文件,以符合ZUGFeRD。爲此我使用Perl和PDFLib。 PDFLib文檔僅適用於Java和PHP。創建PDF工作正常,但XML部分是我的問題。如何爲ZUGFeRD發票創建虛擬XML

那麼我怎樣才能從XML創建一個PVF並將其加入到我的PDF?

這是PDFLib建議在Java中:

// 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 + "}"); 

所以我想,採取的例子,適合它的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."}"); 

在它也不需要轉換爲ByteArray的PHP實例讀完xml後。進一步嘗試解包,但似乎沒有問題。

如果我打電話給我的劇本我剛:

用法:load_asset(類型,文件名,optlist)根據; at signatur_test.pl line 41.

我認爲問題在於pvf_xml沒有在之前創建的行。 任何人之前做過這個,沒有如何解決這個問題?

回答

1

精氨酸,我只是缺少在load_asset方法PDF-手柄:

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

這樣,它的工作原理。