展平后AcroForm值丢失

Mar*_*rco 3 c# itextsharp acrofields

我正在使用LibreOffice 4.1.3.2生成可填写的PDF:

  1. 创建了一个Writer文档
  2. 设置一些文本和测试字段
  3. 导出为PDF

使用Acrobar Reader打开pdf文件显示正确的可填写pdf.
接下来我使用iTextSharp 5.4.5填充字段并保存展平文档:

var pdf = new PdfReader(srcFilename);
using (var fw = new FileStream(dstFilename, FileMode.Create))
{
    var stamper = new PdfStamper(pdf, fw);
    var f = stamper.AcroFields;

    f.SetField("field1", "John Doe");
    f.SetField("field2", "12/04/2013");
    stamper.FormFlattening = true;
    stamper.Close();
}
pdf.Close();
Run Code Online (Sandbox Code Playgroud)

问题是填充的字段值在新文档中完全消失!
我认为没有找到或填充字段,但发现stamper.FormFlattening = true在保存的pdf中有评论字段值!
当然,我需要一个扁平化的PDF格式...

这有解决方案吗?

Bru*_*gie 12

使用Open Office创建表单时,Open Office会设置一个标志,告诉iText不要创建外观.如果查看FillDataSheet示例,您将看到我们使用以下行覆盖它:

fields.setGenerateAppearances(true);
Run Code Online (Sandbox Code Playgroud)

在您的特定C#代码段中,这将是:

f.GenerateAppearances = true;
Run Code Online (Sandbox Code Playgroud)

在设置字段之前设置此值非常重要,否则将不会创建外观.