我不能用itext设置xfa数据

本文关键字:xfa 数据 设置 itext 不能 | 更新日期: 2023-09-27 18:27:53

我有一个由GMC Printnet Designer 7.0生成的pdf。我有一个带有xfa模板的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>

我不能用itext设置xfa数据

正如我在评论中所解释的,我不理解您的代码(也不知道您在哪里找到它)。官方文件说你应该填写这样的表格:

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文件的链接。两个文件都有问题:

  1. PDF文件不是表单。您最多可以将其用作XFAF表单中的背景PDF。这只能手动完成,并且需要Adobe LiveCycle designer等设计器
  2. XML文件不是XFA流!正如我的书中所记录的(OP将其定义为NOT HELPING),XFA流由不同的部分组成,如config部分、localeSet部分、xmp部分,但更重要的是,template部分和datasets部分由datadatadescription部分组成。共享的XML只包含data部分,没有datadescription,也没有template。因此,这个XML永远不能集成到带有XFA表单的PDF文件中:缺少的信息太多了

现在我看到了你在问题中所说的文件,很明显你在问一些不可能的问题。您需要获取XML的xsd,将其导入到Adobe LiveCycle Designer等工具中,然后手动定义模板中字段的位置(XML中缺少该信息),并将PDF定义为表单的背景。

考虑到您共享的文件,没有办法自动执行此过程。