如何为 ZUGFeRD 发票创建虚拟 XML
How to create virtual XML for ZUGFeRD Invoices
我尝试创建一个 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。进一步尝试解包,但似乎不是问题所在。
如果我调用我的脚本,我将得到:
Usage: load_asset(type, filename, optlist); at signatur_test.pl line
41.
我认为问题是 pvf_xml 之前没有创建行。
以前有人这样做过,但不知道如何解决?
Arg,我只是缺少 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");
这样就可以了。
我尝试创建一个 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。进一步尝试解包,但似乎不是问题所在。
如果我调用我的脚本,我将得到:
Usage: load_asset(type, filename, optlist); at signatur_test.pl line 41.
我认为问题是 pvf_xml 之前没有创建行。 以前有人这样做过,但不知道如何解决?
Arg,我只是缺少 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");
这样就可以了。