【问题标题】:How can I flatten a XFA PDF Form using iTextSharp?如何使用 iTextSharp 展平 XFA PDF 表单?
【发布时间】:2015-01-19 22:43:03
【问题描述】:

我假设我需要展平 XFA 表单才能在使用 Nuance 的 CSDK 的应用程序的 UI 上正确显示。当我现在处理它时,我收到一条通用消息“请稍候......如果最终没有替换此消息......”。

正在寻找一些示例 iTextSharp 代码来执行此操作。

【问题讨论】:

    标签: pdf itextsharp xfa


    【解决方案1】:

    您没有插入代码示例来显示您当前如何展平 XFA 表单。我假设您的代码如下所示:

    var reader = new PdfReader(existingFileStream);
    var stamper = new PdfStamper(reader, newFileStream);
    var form = stamper.AcroFields;
    var fieldKeys = form.Fields.Keys;
    foreach (string fieldKey in fieldKeys) {
        form.SetField(fieldKey, "X");
    }
    stamper.FormFlattening = true;
    stamper.Close();
    reader.Close();
    

    此代码在尝试基于 AcroForm 技术展平表单时可以使用,但它不能用于基于 XML 表单架构 (XFA) 的表单!

    动态 XFA 表单通常包含一个单页 PDF(带有“请稍候...”消息的那个),它显示在不理解 XFA 的查看器中。文档的实际内容存储为 XML 文件。

    将 XFA 表单展平为普通 PDF 的过程需要您解析 XML 并将 XML 语法转换为 PDF 语法。这可以使用 iText 的 XFA Worker 来完成:http://itextpdf.com/product/xfa_worker

    假设您在内存中有一个文件 (ms),其中包含一个已填写的 XFA 表单,那么您可以使用以下代码来展平该表单:

    Document document = new Document();
    PdfWriter writer =
        PdfWriter.GetInstance(document, new FileStream(dest, FileMode.Create));
    XFAFlattener xfaf = new XFAFlattener(document, writer);
    ms.Position = 0;
    xfaf.Flatten(new PdfReader(ms));
    document.Close();
    

    您可以下载包含 XFA Worker 的 DLL 的 zip 文件以及此处的示例:http://itextsupport.com/download/xfa-net.zip

    但是:由于太多开发人员在商业环境中使用 AGPL 版本的 iTextSharp 而没有购买商业许可证,我们决定不开源 XFA Worker。您可以获得试用期的许可证密钥,但它是建立在商业版 iTextSharp 之上的商业产品。如果您从 iText Software 购买许可证,XFA Worker 只能在生产中使用。对于 iTextSharp 也是如此,但对于 iTextSharp,如果您不购买商业许可证,则没有阻止使用的许可证密钥。对于 iTextSharp,我们依靠诚实。对于 XFA Worker,我们采取了一些预防措施 ;-)

    【讨论】:

    • 感谢您的回复,我没有提供任何代码,因为我没有任何代码,也不知道从哪里开始。所以你是说使用 AGPL 版本,没有办法展平 XFA PDF?
    • 除了 Adob​​e LiveCycle(几十万美元)和 iText 的 XFA Worker,你可能找不到任何其他可以扁平化动态 XFA 的软件。原因很简单:XFA 规范对于“爱好者”来说太复杂了。您不会找到愿意免费开发 XFA 压平机的人。
    • 在我使用 PDF1.7 的情况下,文本的定位在使用 XFAFlatener 处理后发生了更改。还有一些元素重叠。但是在 PDFCreator 上打印时生成的 PDF1.4 与原始文件相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2013-01-05
    相关资源
    最近更新 更多