2013-07-25 72 views
9

我有一個啓用了擴展功能的表單的PDF模板。使用iTextSharp的這個表單的字段填寫後,與Acrobat Reader的用戶得到的錯誤消息:使用iTextSharp禁用擴展功能

該文件啓用在Adobe Reader擴展功能。該文檔自 創建以來已更改,並且擴展功能的使用不再可用 。請聯繫作者,獲取 文檔的原始版本。

我GOOGLE了一下,但所有的帖子談「啓用」擴展功能,但是,我想表單字段保持殘疾人和擴展功能關閉

這裏的樣本代碼我使用:

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

也許你不應該保存它,但創意用iTextSharp替代它的一個新實例?由於您剛剛重新創建了文檔,因此不做任何更改?我不熟悉PDF擴展功能或iTextSharp。你的代碼與iTextSharp的用法有什麼關係?我目前正在閱讀Java API,但其安靜的大... –

+0

@Mike:我正在創建一個新的實例。我更新了問題以顯示我正在使用的代碼。 – Jags

回答

10

iText KeywordReader enabled PDFs指向以下信息:

布魯諾Lowagie於星期五,12/31/2010 - 16:37

填寫我的表格後,我的PDF顯示以下信息:本文檔啓用在Adobe 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() 
0

之前使用PdfStamper constractor超載

填寫追加模式形式
// PdfStamper, which will create 
var stamper = new PdfStamper(pdfReader, fileStream, '\0', true);