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

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

最佳答案

您没有插入代码示例来显示当前如何展平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(带有“请稍候...”消息的PDF)组成,该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软件购买了许可证,则只能在生产中使用XFA Worker。对于iTextSharp也是如此,但是对于iTextSharp,如果您不购买商业许可证,则没有许可证密钥会阻止使用。对于iTextSharp,我们依靠诚实。对于XFA Worker,我们采取了一些预防措施;-)

关于pdf - 如何使用iTextSharp展平XFA PDF表单?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27067250/

10-09 14:32