16

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

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

指向任何非标准资源的指针都会有所帮助(我已经对该主题进行了必要的谷歌搜索,但没有发现任何有用的东西)。

这里的代码示例对于任何实际完成我正在尝试做的事情的人来说都是很棒的。

4

5 回答 5

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

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

于 2009-08-06T14:04:34.370 回答
5

iTextSharp 可以与 XFA 一起使用。为了消除所有疑虑,请查看 iText 网站上的示例:

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

于 2011-03-11T01:07:04.620 回答
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();
}
于 2012-05-15T10:38:50.070 回答
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 部分。

于 2013-11-15T20:12:40.563 回答
0

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

于 2009-07-25T19:22:31.473 回答