C# 展平后缺少AcroForm值

C# 展平后缺少AcroForm值,c#,itextsharp,acrofields,C#,Itextsharp,Acrofields,我正在使用LibreOffice 4.1.3.2生成可填充的PDF: 创建了一个Writer文档 设置一些文本和测试字段 导出为PDF格式 使用Acrobar Reader打开pdf文件将显示正确的可填充pdf。 接下来,我使用iTextSharp 5.4.5填充字段并保存展开的文档: var pdf = new PdfReader(srcFilename); using (var fw = new FileStream(dstFilename, FileMode.Create)) {

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

  • 创建了一个Writer文档
  • 设置一些文本和测试字段
  • 导出为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();
    
    问题是填充的字段值在新文档中完全消失
    我以为没有找到或填充字段,但发现注释
    stamper.formflatting=true
    字段值保存在pdf中
    当然我需要一个扁平的pdf


    有解决方案吗?

    使用Open Office创建表单时,Open Office会设置一个标志,告诉iText不要创建外观。如果你看这个例子,你会发现我们用下面的行覆盖它:

    fields.setGenerateAppearances(true);
    
    f.SetNeedAppearances(true);
    
    在您特定的C#代码片段中,这将是:

    f.GenerateAppearances = true;
    

    在设置字段之前设置此值很重要,否则将无法创建外观。

    添加以下行后,我的工作正常:

    fields.setGenerateAppearances(true);
    
    f.SetNeedAppearances(true);
    

    谢谢,它工作得很好。只需要说
    f.generateApearances=true必须在填充字段之前设置,否则将无效…f.GenerateAppearancess引发nullreference异常。请help@M.S请不要“劫持”一个正确的答案来发布一个额外的问题。如果您有问题,请创建一个新问题。另外,请提供导致问题的PDF。感谢Bruno,这使我避免了上述问题中类似的问题(客户向我们发送了使用Scribus制作的令人敬畏的PDF)。如果您的其他表单展平示例包含此标志/属性,我可能会更快地到达那里;-)您似乎参考了itext 7。OP和其他答案参考itext 5。你可能想在回答中强调这一点。