我需要填充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的与您键入的值包。那就是你需要自己创建并插入PDF什么。

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

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

另外,你买从Adobe的LiveCycle的服务器,它可以让你做这一切编程方式多种方式,包括通过Web服务调用。

其他提示

iTextSharp的可以与XFA工作。要删除所有的疑虑,请看一看样品关于iText的网站:

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

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?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top