ITextSharp PDFTemplate FormFlattening删除填充数据

本文关键字:填充 数据 删除 FormFlattening PDFTemplate ITextSharp | 更新日期: 2023-09-27 18:32:22

我正在将现有的应用程序从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 PDFTemplate FormFlattening删除填充数据

最有可能的是,

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

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

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

我为任何较新的iTextSharp找到了有效的解决方案。我们的做法是:1-创建pdf板的副本。2-用数据填充副本。3- FormFlatten = true and setFullCompression4-将一些PDF合并到一个新文档中。5-移动新的合并文档,然后删除临时文档。

这样我们就遇到了删除输入的问题,如果我们跳过"formflatten",它看起来还可以。

但是,当我们从步骤 3 中移动"FormFlatten = true"并在移动等完成后将其添加为单独的步骤时,它运行良好。

希望我解释得还行:)

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