2016-11-16 6 views
1

Я пытаюсь создать файл PDF/A-3b, который содержит встроенный XML-файл для соответствия ZUGFeRD. Для этой цели я использую Perl и PDFLib. Документация PDFLib существует только для Java и PHP. Создание PDF прекрасно работает, но часть XML - моя проблема.Как создать виртуальный XML для счетов-фактур ZUGFeRD

Так как я могу создать pvf из xml и присоединиться к этому в мой 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 это также не нужны, чтобы преобразовать в ByteArray после чтения xml. Дальше попробовал его с распаковкой, но, похоже, это не проблема.

Если я вызываю мой сценарий, я просто получаю:

Использование: load_asset (тип, имя файла, optlist); на signatur_test.pl линии 41.

Я думаю, что проблема в том, что pvf_xml не создал линию раньше. Кто-то сделал это раньше, и нет, как это решить?

ответ

1

Arg, я просто отсутствует в PDF-Handle в методе load_asset:

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

Таким образом, он работает.