我需要在PDF中填充XFA表单字段(使用Adobe LiveCycle Designer创建)。我们尝试使用iText(实际上是带有C#的iTextSharp)来解析PDF,填充XFA字段,然后将修改后的PDF保存回来。
我可以通过iText找到的所有示例(很少有iTextSharp示例)讨论修改AcroForm字段。此PDF没有AcroForm字段,仅使用XFA。
指向任何非标准资源都会有所帮助(我已经完成了关于该主题的必要Google搜索并且没有找到任何有用的资源)。
这里的代码示例对任何实际完成我正在尝试的人来说都是非常棒的。
答案 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网站上查看示例:
答案 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吗?