展平后AcroForm值丢失

时间:2013-12-11 18:02:53

标签: c# itextsharp acrofields

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

  1. 创建了一个Writer文档
  2. 设置一些文字和测试字段
  3. 导出为PDF
  4. 使用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();
    

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

    有解决方法吗?

2 个答案:

答案 0 :(得分:12)

使用Open Office创建表单时,Open Office会设置一个标志,告知iText不要创建外观。如果您查看FillDataSheet示例,您会看到我们使用以下行重写此内容:

fields.setGenerateAppearances(true);

在您的特定C#代码段中,即:

f.GenerateAppearances = true;

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

答案 1 :(得分:0)

添加以下行后它对我有用:

f.SetNeedAppearances(true);