1

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

1 回答 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

更新:

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

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

现在我已经看到了您在问题中谈论的文件,很明显您在问一些不可能的事情。您需要获取xsdXML 文件,将其导入 Adob​​e LiveCycle Designer 等工具,然后手动定义模板中字段的位置(XML 中缺少该信息)并将 PDF 定义为表单的背景.

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

于 2014-10-27T11:43:34.607 回答