如何使用iTextSharp压平XFA PDF表单?

时间:2014-11-21 17:44:13

标签: pdf itextsharp xfa

我假设我需要展平XFA表单,以便在使用Nuance的CSDK的应用程序的UI上正确显示。当我现在处理它时,我得到一个通用消息"请等待....如果此消息最终没有被替换.."。

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

1 个答案:

答案 0 :(得分:5)

您没有插入代码示例来展示您当前如何展平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 Forms Architecture(XFA)的表单!

动态XFA表单通常由单个页面PDF(带有“请稍候...”消息的页面)组成,该页面在查看器中显示为不了解XFA。文档的实际内容存储为XML文件。

将XFA表单展平为普通PDF的过程要求您解析XML并将XML语法转换为PDF语法。这可以使用iText的XFA工作人员完成: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工作者,我们采取了一些预防措施; - )