ITextSharp PDFTemplate FormFlattening删除填充的数据

我正在将现有的应用程序从Java移植到C#。 原始应用程序使用IText库填充PDF表单模板并将其另存为新PDF。 我的C#代码(示例)如下:

string templateFilename = @"C:\Templates\test.pdf"; string outputFilename = @"C:\Output\demo.pdf"; using (var existingFileStream = new FileStream(templateFilename, FileMode.Open)) { using (var newFileStream = new FileStream(outputFilename, FileMode.Create)) { var pdfReader = new PdfReader(existingFileStream); var stamper = new PdfStamper(pdfReader, newFileStream); var form = stamper.AcroFields; var fieldKeys = form.Fields.Keys; foreach (string fieldKey in fieldKeys) { form.SetField(fieldKey, "REPLACED!"); } stamper.FormFlattening = true; stamper.Close(); pdfReader.Close(); } } 

只有我省略了,所有这些都很有效

 stamper.FormFlattening = true; 

行,但然后表单可见为…表单。 当我添加此行时,设置为表单字段的任何值都将丢失,从而产生一个空白表单。 我真的很感激任何建议。

通过强制iTextSharp为表单字段生成外观,使用iTextSharp 5.4.4(或更高版本)时,最有可能解决此问题。 在您的示例代码中:

 var form = stamper.AcroFields; form.GenerateAppearances = true; 

使用以前版本的ITextSharp(5.4.3)解决了该问题。 不知道原因是什么……

我找到了适用于任何新的iTextSharp的工作解决方案。 我们这样做的方式是:1-创建pdf temmplate的副本。 2-用数据填充副本。 3- FormFlatten = true和setFullCompression 4-将一些PDF组合到一个新文档中。 5-移动新的组合文档,然后删除temp。

这样我们就得到了删除输入的问题,如果我们跳过“formflatten”它看起来没问题。

然而,当我们从步骤3移动“FormFlatten = true”并在移动等完成后将其作为单独的步骤添加时,它完美地工作。

希望我解释得有点好:)

在PDF文件中,将属性更改为Visible ,默认值为Visible但不可打印