7

我正在将现有应用程序从 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

4 回答 4

21

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

var form = stamper.AcroFields;
form.GenerateAppearances = true;
于 2013-11-06T13:46:13.240 回答
3

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

于 2013-09-21T09:40:02.623 回答
0

我为任何更新的 iTextSharp 找到了一个可行的解决方案。我们这样做的方式是: 1- 创建 pdf 模板的副本。2-用数据填充副本。3- FormFlatten = true 和 setFullCompression 4- 将一些 PDF 合并到一个新文档中。5-移动新的组合文档,然后删除临时文件。

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

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

希望我解释得有点好:)

于 2015-04-08T10:25:36.870 回答
-2

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

于 2018-05-16T16:22:13.210 回答