使用iTextSharp禁用扩展function

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

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

我搜索了一下,但所有post都谈到“启用”扩展function,但是,我希望表单字段保持禁用状态关闭扩展function

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

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(); } 

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

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

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

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

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

它还指向示例ReaderEnabledForm.java (C#/ iTextSharp等效于ReaderEnabledForm.cs ),它显示了如何执行任一操作。

在你的情况下,这相当于打电话

 pdfReader.RemoveUsageRights(); 

在创建PdfReader和创建PdfStamper.之前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);