使用iTextSharp禁用扩展功能

本文关键字:扩展 功能 iTextSharp 使用 | 更新日期: 2023-09-27 18:24:45

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

此文档在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();
}

使用iTextSharp禁用扩展功能

由于iTextPdf网站已经完全改进,这里的链接已经失效。但答案也可以在没有这些联系的情况下理解

iText关键字:启用阅读器的PDF指向以下信息:

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

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

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

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

它还指向示例ReaderEnabledForm.java(C#/iTextSharp的等价物是ReaderEnabledPorm.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()

使用PdfStamper构造函数重载以追加模式填写表单

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