【问题标题】:Dynamic XFA PDF Forms动态 XFA PDF 表单
【发布时间】:2016-02-25 21:55:27
【问题描述】:

我有许多使用 Livecycle Designer 创建的动态 XFA PDF。这些 PDF 文件用作模板供各种个人完成。当用户请求模板时,我们必须编写一个带有指向 .net 应用程序的 url 的提交按钮,以便处理并将一些字段与数据库中的信息更新到 PDF 中。

我可以使用 iText(Sharp) 和 .net 来更新动态 xfa pdf 以在其中写入提交按钮并更新字段,然后使用 iText(Sharp) 处理返回的表单。

我们现在正在使用 Acroforms 执行此操作,但也需要对 Dynamic XFA 表单执行相同操作。我找不到任何确认信息表明这是可能的。如果可能的话,有没有人可以分享任何代码来告诉我如何做到这一点?

【问题讨论】:

  • XFA 与 AcroForm 技术有很大不同。更改 XFA 表单需要您 [a.] 从其 PDF 容器中提取描述表单的 XML(可能使用 iText),[b.] 更新 XML(在 iText 范围之外:使用任何 XML 操作工具执行此操作) ,然后 [c.] 将 XML 放回 PDF 容器中(可能与 iText 一起使用)。 [a.] 和 [c.] 很容易回答; [b.] 要求您完全了解 XFA 规范。

标签: pdf dynamic itextsharp xfa


【解决方案1】:

您还可以实现将 pdf 的内容放入 XmlDocument 并像使用 XML 一样工作。 这是我用来替换一些在文本框中编写的占位符的代码。

PdfReader pdfReader = new PdfReader(path_pdf);
using (PdfStamper pdfStamp = new PdfStamper(pdfReader, new FileStream(temp_path, FileMode.Create), '\0', true))
{
    pdfStamp.ViewerPreferences = PdfWriter.AllowModifyContents;
    XmlDocument xmlDocument = pdfReader.AcroFields.Xfa.DomDocument;
    string pdfContent = xmlDocument.InnerXml;
    string newpdfContent = pdfContent
        .Replace("$CONTENT_TO_REPLACE_1$", "some_content")
        .Replace("$CONTENT_TO_REPLACE_2$", "some_other_content")

    xmlDocument.InnerXml = newpdfContent;
    Stream stream = GenerateStreamFromString(newpdfContent);
    pdfStamp.AcroFields.Xfa.FillXfaForm(stream);
    pdfStamp.AcroFields.Xfa.DomDocument = xmlDocument;
    pdfStamp.Close();
}

【讨论】:

    猜你喜欢
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    相关资源
    最近更新 更多