首页 文章

使用iTextSharp禁用扩展功能

提问于
浏览
10

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

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

我用Google搜索了一下,但是所有的帖子都讨论了"enabling"扩展功能,但是,我希望表单字段保持 disabled 并关闭扩展功能

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

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 回答

  • 1

    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()
    
  • 11

    使用 PdfStamper 约束器重载以附加模式填写表单

    // PdfStamper, which will create
    var stamper = new PdfStamper(pdfReader, fileStream, '\0', true);
    

相关问题