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

Chu*_*uck 2 pdf xfa itextsharp

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

寻找一些示例iTextSharp代码来做到这一点.

Bru*_*gie 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();
Run Code Online (Sandbox Code Playgroud)

当尝试基于AcroForm技术展平表单时,此代码将起作用,但它不能用于基于XML Forms Architecture(XFA)的表单!

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

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

假设您在memory(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();
Run Code Online (Sandbox Code Playgroud)

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

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

  • 除了Adobe LiveCycle(数十万美元)和iText的XFA Worker之外,您可能找不到任何其他可以展平动态XFA的软件.原因很简单:XFA规范对于"业余爱好者"而言过于复杂.你不会发现任何愿意免费开发XFA压扁机的人. (4认同)