首页 文章

我不能用itext设置xfa数据

提问于
浏览
1

我有一个由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>

1 回答

  • 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

    Update:

    在评论中,您添加了指向PDF和XML文件的链接 . 这两个文件都有问题:

    • PDF文件不是表格 . 最多,您可以将其用作XFAF表单中的背景PDF . 这只能手动完成,需要Adobe LiveCycle Designer等设计人员 .

    • XML文件 is not an XFA stream !正如我的书中所述(OP定义为不帮助),XFA流由不同的部分组成,例如 config 部分, localeSet 部分, xmp 部分,但更重要的是 template 部分和 datasets 部分由a datadatadescription 部分 . 共享的XML仅包含 data 部分,没有 datadescription 且没有 template . 因此,这个XML永远不会被整合到带有XFA表单的PDF文件中:缺少太多信息 .

    现在我想问一些不可能的事情 . 您需要获取XML的 xsd ,将其导入到Adobe LiveCycle Designer等工具中,然后手动定义模板中字段的位置(XML中缺少该信息),并将PDF定义为您的背景 . 形成 .

    鉴于您共享的文件,无法自动执行此过程 .

相关问题