使用iTextSharp禁用扩展功能

时间:2013-07-25 08:32:39

标签: c# itextsharp

我有一个PDF模板,其中包含启用了扩展功能的表单。使用 iTextSharp 填写此表单的字段后,使用acrobat reader的用户会收到错误消息:

  

此文档在Adobe Reader中启用了扩展功能。该文件有   自创建以来已被更改,并且不再使用扩展功能   可用。请联系作者以获取此版本的原始版本   文档。

我用谷歌搜索了一下,但所有的帖子都谈到"启用"但是,扩展功能我希望表单字段保持禁用并且扩展功能已关闭

这是我正在使用的示例代码:

using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open))
using (var newFileStream = new FileStream(fileNameNew, FileMode.Create))
{
    // Open existing PDF
    var pdfReader = new PdfReader(existingFileStream);

    // PdfStamper, which will create
    var stamper = new PdfStamper(pdfReader, newFileStream);

    var form = stamper.AcroFields;

    var fieldKeys = form.Fields.Keys;

    foreach (string fieldKey in fieldKeys)
    {
        if (fieldKey.Equals("Retailer Name"))
            form.SetField(fieldKey, retailerName);
    }
    // “Flatten” the form so it wont be editable/usable anymore
    stamper.FormFlattening = true;

    stamper.Close();
    pdfReader.Close();
}

2 个答案:

答案 0 :(得分:11)

iText KeywordReader enabled PDFs指向以下信息:

  

Bruno Lowagie于星期五,12/31/2010 - 16:37提交

     
    

填写表单后,我的PDF显示以下消息:此文档在Adobe Reader中启用了扩展功能。该文档自创建以来已更改,并且不再使用扩展功能。请联系作者以获取本文档的原始版本。如何避免此消息?

  
     

表单的创建者启用了文档Reader。只能使用Adobe软件完成阅读器启用。您可以通过两种方式避免此消息:

     
      
  • 删除使用权利。这将导致表单不再启用Reader。例如:如果文档的创建者允许填写的表单可以在本地保存,则在删除使用权后将不再可能这样做。
  •   
  • 以追加模式填写表格。这将导致更大的文件大小,但将保留Reader启用。
  •   

它还指向示例ReaderEnabledForm.java(C#/ iTextSharp的等效值为ReaderEnabledForm.cs),其中显示了如何执行此操作。

在你的情况下,这相当于调用

pdfReader.RemoveUsageRights();
创建PdfReader之后和创建PdfStamper.

之前

/**
 * Removes any usage rights that this PDF may have. Only Adobe can grant usage rights
 * and any PDF modification with iText will invalidate them. Invalidated usage rights may
 * confuse Acrobat and it's advisabe to remove them altogether.
 */
public void RemoveUsageRights()

答案 1 :(得分:1)

使用PdfStamper约束器重载

以附加模式填写表单
// PdfStamper, which will create
var stamper = new PdfStamper(pdfReader, fileStream, '\0', true);