ITextSharp PDFTemplate FormFlattening删除填充的数据

Nub*_*ieJ 6 c# itextsharp

我正在将现有的应用程序从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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

stamper.FormFlattening = true;
Run Code Online (Sandbox Code Playgroud)

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

rhe*_*ens 21

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

var form = stamper.AcroFields;
form.GenerateAppearances = true;
Run Code Online (Sandbox Code Playgroud)


Nub*_*ieJ 3

使用早期版本的 ITextSharp (5.4.3) 解决了该问题。虽然不知道原因是什么...