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

发布于 2024-07-26 05:03:32 字数 338 浏览 9 评论 0原文

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

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

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

对于任何真正做过我想做的事情的人来说,这里的代码示例都会很棒。

I need to populate XFA form fields in a PDF (created with Adobe LiveCycle Designer). We're attempting to use iText (actually iTextSharp with C#) to parse the PDF, populate the XFA fields and then save the modified PDF back out.

All the examples I can find with iText (very few iTextSharp examples) talk about modifying AcroForm fields. This PDF does NOT have AcroForm fields and uses XFA only.

Pointers to any non-standard resources would be helpful (I've already done the requisite Googling on the topic and haven't found anything useful).

Code examples here would be awesome from anyone who has actually done what I'm trying to do.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

岁月蹉跎了容颜 2024-08-02 05:03:32

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

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

使用可让您查看 PDF 数据的工具打开 PDF,您会发现 /Catalog/AcroForm/XFA 具有的流。 包含您键入的值的数据包。 这就是您需要自己创建并插入到 PDF 中的内容。

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

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

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

If you can get a data packet into the PDF, the XFA runtime in Acrobat would populate those fields with the data in the data packet.

If you want to see what one of these looks like, create a form in LiveCycle Designer (comes with Acrobat Pro), add some fields to it, and save it as a dynamic PDF. Open the form in Acrobat and type some values into the fields and save it.

Open the PDF with a tool that lets you peer at the PDF data and you'll find /Catalog/AcroForm/XFA a stream that has an <xfa:datasets> packet with the values you typed. That's what you'll need to create yourself and insert into the PDF.

The XDP spec includes a description of the data packet and the merge algorithm. You can find it here:

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

Alternately, you buy the LiveCycle server from Adobe which lets you do all this programmatically in a number of ways including through web service calls.

篱下浅笙歌 2024-08-02 05:03:32
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();
}
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();
}
永不分离 2024-08-02 05:03:32

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

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

iTextSharp can work with XFA. To remove all doubts, please take a look at sample on iText website:

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

魄砕の薆 2024-08-02 05:03:32

我有同样的问题,我想我找到了解决方案。 我正在使用 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 部分。

I have the same issue and I think I found the solution. I am using Powershell to inspect the pdf object.

Load the iTextSharp DLL.

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

Load the PDF into a variable:

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

Inspect this object:

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

What you SHOULD see, is that all your fields on your PDF are in this object as a property.
You can get a quick view of all your fields like this:

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

That should be the magic ticket. This location is both fields from the original form AND the XFA portion of the form.

海未深 2024-08-02 05:03:32

书上这么说是因为 itext 不这样做。 你能转换你的PDF吗?

It says that in the book because itext does not do this. Can you convert your PDF?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文