如何为ZUGFeRD发票创建虚拟XML

时间:2016-11-16 08:03:01

标签: perl pdflib

我尝试创建一个PDF / A-3b文件,其中包含符合ZUGFeRD的嵌入式XML文件。我为此目的使用Perl和PDFLib。 PDFLib文档仅适用于Java和PHP。创建PDF工作正常,但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."}");

在PHP示例中,读取xml后也不需要转换为ByteArray。进一步尝试解压,但似乎不是问题。

如果我打电话给我的剧本我就是:

  

用法:load_asset(type,filename,optlist);在signatur_test.pl行   41。

我认为问题是pvf_xml之前没有创建过该行。 以前有人这样做了,没有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

Arg,我刚刚错过了load_asset方法中的PDF-Handle:

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

这种方式有效。