ITextSharp PDFTemplate FormFlattening删除填充的数据

时间:2013-09-20 20:27:21

标签: 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();
    }
}

只有在我省略

时,一切正常
stamper.FormFlattening = true;

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

4 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

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

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

希望我解释得有点好:)

答案 3 :(得分:-2)

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