我有一个由GMC Printnet Designer 7.0制作的pdf。我有一个xml模板的xml文件。我想合并它们并将数据嵌入pdf中。 (我不想附加xml!)
我可以读取xml数据,我可以读取输入pdf,我可以启动一个内存流并用它生成输出数据。但是当我检查我用itext生成的pdf时,我看不到xfa形式。
这是我的c#代码和xml文件:
PdfReader reader = new PdfReader("in.pdf");
MemoryStream ms = new MemoryStream();
PdfStamper stamper = new PdfStamper(reader, ms);
XfaForm xfa = new XfaForm(reader);
XmlDocument doc = new XmlDocument();
doc.Load("in.xml");
xfa.DomDocument = doc;
xfa.Changed = true;
XfaForm.SetXfa(xfa, stamper.Reader, stamper.Writer);
xfa.XfaPresent = true;
stamper.Close();
File.WriteAllBytes("out.pdf", ms.ToArray());
XML文件
<?xml version="1.0" encoding="UTF-8"?><xfa:data xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
<Invoice>
<InvoiceNr>1010101010101010</InvoiceNr>
<DateIssuance>2014-07-22</DateIssuance>
<PaymentDueDate>2014-09-09</PaymentDueDate>
<AmountToBePaid>53,25</AmountToBePaid>
</Invoice>
</xfa:data>
答案 0 :(得分:2)
正如我在评论中所解释的那样,我不了解您的代码(我也不知道您在哪里找到它)。官方文档说你应该填写这样的表格:
using (PdfStamper stamper = new PdfStamper(reader, ms)) {
AcroFields form = stamper.AcroFields;
XfaForm xfa = form.Xfa;
xfa.FillXfaForm(XmlReader.Create(new StringReader(xml)));
}
请参阅XfaMovies示例。对于C#版本,请参阅http://tinyurl.com/itextsharpIIA2C08
<强>更新强>
在评论中,您添加了指向PDF和XML文件的链接。这两个文件都有问题:
config
部分,localeSet
部分,xmp
部分,但更多重要的是,template
部分和datasets
部分由data
和datadescription
部分组成。共享的XML仅包含data
部分,没有datadescription
且没有template
。因此,这个XML 永远不会被整合到一个带有XFA表单的PDF文件中:缺少太多信息。既然我已经看到了你在问题中谈论的文件,很明显你会问一些不可能的事情。您需要获取XML的xsd
,将其导入Adobe LiveCycle Designer等工具,然后手动定义模板中字段的位置(您的信息中缺少该信息) XML)并将PDF定义为表单的背景。
根据您共享的文件,无法自动执行此过程。