利用iText(iTextSharp的)来填充PDF XFA表单域?
题
我需要填充XFA表单字段的PDF(使用Adobe LiveCycle Designer中创建的)。我们正在尝试使用的iText(实际上iTextSharp的用C#)来解析PDF,填充XFA字段,然后保存修改后的PDF退了出去。
我可以用的iText(很少iTextSharp的例子),发现所有的例子谈修改AcroForm领域。本PDF没有AcroForm字段,并使用XFA只。
指针到任何非标准资源将是有益的(我已经做了必要的谷歌搜索的话题,并没有发现任何有用的)。
下面的代码示例是从人谁真正做了什么,我试图做的真棒。
解决方案
如果你能得到一个数据包到PDF,Acrobat中的XFA运行时将填充这些领域与数据包中的数据。
如果你想看看这些看起来像之一,创建于LiveCycle Designer中的表单(自带的Acrobat Pro),添加一些字段,然后将其保存为PDF格式的动态。在Acrobat中打开表单并键入一些值的字段并保存它。
用的工具,可以让你在同行的PDF数据,你会发现/目录/ AcroForm / XFA具有流打开PDF的
在XDP规范包括数据包和合并算法的描述。你可以在这里找到它:
http://partners.adobe.com/public/developer/xml/ index_arch.html
另外,你买从Adobe的LiveCycle的服务器,它可以让你做这一切编程方式多种方式,包括通过Web服务调用。
其他提示
iTextSharp的可以与XFA工作。要删除所有的疑虑,请看一看样品关于iText的网站:
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();
}
我有同样的问题,我想我找到了解决办法。我使用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部这两个字段。
报告说,在这本书,因为iText的并没有这样做。您可以将您的PDF?