2017-08-08 42 views
0

我使用itextsharp 5.5來設置pdf中幾個未計算字段的字段值。該pdf還包含計算值。我想要做的是計算所計算的值,然後使所有字段爲只讀,以便打開PDF的用戶無法再編輯這些值。當展平時保留當前計算的值pdf

我已成功使用

pdfStamper.JavaScript = "this.calculateNow();"; 

得到的計算值,但是這留下的字段編輯。使用

pdfStamper.FormFlattening = true; 

使字段爲只讀,但計算的值再次被刪除。即使我只計算,將pdf保存爲一個臨時文件,打開臨時文件並再次將其保存爲FormFlattening設置爲true,最終的PDF不再具有計算的值。

有趣的是,如果我設置FormFlattening爲假,不包括行pdfReader.RemoveUsageRights();

生成的PDF給出了錯誤「這個文件啓用在Adobe Reader擴展功能。因爲它是創建該文件已更改,使用擴展功能不再可用「在Adobe Reader中打開時,但在關閉該錯誤消息後,pdf看起來沒問題,計算的字段被填充並且文檔根據需要爲只讀。但是,由於生成的pdf將被分發,讓他們都拋出錯誤消息不是一個解決方案。

所以我的問題是,有沒有辦法使用FormFlattening,同時保持任何目前計算的字段值?是否有另一種方法使字段爲只讀?當我沒有包含我可以使用的RemoveUsageRights,或者這些字段只是由於錯誤而無法編輯時,是否有這種行爲?

回答

0

我設置的所有字段中的PDF只讀使用

foreach (var key in pdfFormFields.Fields.Keys){ 
    pdfFormFields.SetFieldProperty(key, "setfflags", PdfFormField.FF_READ_ONLY, null); 
} 

這使計算值,同時防止進一步的編輯找到了解決辦法。但它不是很整潔,而且Adobe Reader總是認爲該文件很髒,並會在打開PDF時嘗試關閉Reader時提示保存對話框。所以我仍然願意提供更好的想法(或通過此解決方案解決提示問題)。

相關問題