使用iText(iTextSharp)填充PDF中的XFA表单字段?

时间:2009-06-25 00:40:52

标签: c# pdf itext xfa

我需要在PDF中填充XFA表单字段(使用Adobe LiveCycle Designer创建)。我们尝试使用iText(实际上是带有C#的iTextSharp)来解析PDF,填充XFA字段,然后将修改后的PDF保存回来。

我可以通过iText找到的所有示例(很少有iTextSharp示例)讨论修改AcroForm字段。此PDF没有AcroForm字段,仅使用XFA。

指向任何非标准资源都会有所帮助(我已经完成了关于该主题的必要Google搜索并且没有找到任何有用的资源)。

这里的代码示例对任何实际完成我正在尝试的人来说都是非常棒的。

5 个答案:

答案 0 :(得分:5)

如果您可以将数据包导入PDF,Acrobat中的XFA运行时将使用数据包中的数据填充这些字段。

如果您想查看其中一个是什么样的,请在LiveCycle Designer(Acrobat Pro附带)中创建表单,向其中添加一些字段,并将其另存为动态PDF。在Acrobat中打开表单并在字段中键入一些值并保存。

使用可让您查看PDF数据的工具打开PDF,您将找到/ Catalog / AcroForm / XFA,其中包含< xfa:datasets>包含您键入的值的数据包。这就是您自己创建并插入PDF所需的内容。

XDP规范包括数据包和合并算法的描述。你可以在这里找到它:

http://partners.adobe.com/public/developer/xml/index_arch.html

或者,您从Adobe购买LiveCycle服务器,它允许您通过多种方式以编程方式完成所有这些操作,包括通过Web服务调用。

答案 1 :(得分:5)

iTextSharp可以使用XFA。要消除所有疑虑,请在iText网站上查看示例:

http://itextpdf.com/examples/iia.php?id=165

答案 2 :(得分:4)

using (FileStream existingPdf = new FileStream("existing.pdf", FileMode.Open))
using (FileStream sourceXml = new FileStream("source.xml", FileMode.Open))
using (FileStream newPdf = new FileStream("new.pdf", FileMode.Create))
{
    // Open existing PDF  
    PdfReader pdfReader = new PdfReader(existingPdf);

    // PdfStamper, which will create  
    PdfStamper stamper = new PdfStamper(pdfReader, newPdf);
    stamper.AcroFields.Xfa.FillXfaForm(sourceXml);

    stamper.Close();
    pdfReader.Close();
}

答案 3 :(得分:1)

我有同样的问题,我想我找到了解决方案。我正在使用Powershell来检查pdf对象。

加载iTextSharp DLL。

Add-Type -Path "C:\Users\micah\Desktop\itextsharp.dll"

将PDF加载到变量中:

$PDF = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList "C:\Users\micah\Desktop\test.pdf"

检查此对象:

$PDF.AcroFields.XFA.DomDocument.XDP.DataSets.Data.TopMostSubForm | Get-Member

您应该看到的是,PDF上的所有字段都作为属性存在于此对象中。 您可以快速查看所有字段,如下所示:

$PDF.AcroFields.XFA.DomDocument.XDP.DataSets.Data.TopMostSubForm | Select-Object -Property "*"

那应该是神奇的票。此位置是原始表单和表单的XFA部分中的字段。

答案 4 :(得分:0)

它说在书中因为itext没有这样做。你能转换你的PDF吗?