我正在使用iText生成PDF文件。我想禁止編輯PDF,但允許讀者提取頁面。這裏是我的代碼來設置加密:禁止編輯,但允許在Java iText/PDF中提取頁面
writer.setEncryption(null, null, 0xffffffff, PdfWriter.STANDARD_ENCRYPTION_128);
第三個參數指定的權限。我使用0xffffffff而不是個別iText標誌ALLOW_PRINTING等。這將要求iText啓用一切。但是,這是我在PDF文件中得到:
我覺得我應該被允許啓用提取,但禁止編輯,但我不能肯定。這裏有權限位按照Adobe:
(從here,但是要注意它的30兆)
所以關掉位6和11,但在其他人(特別是第5位和10)離開,這將關閉編輯,但允許提取。在任何情況下,通過指定0xffffffff我會認爲一切都會被允許;但是相反除之外都允許提取。
我瀏覽了設置權限的iText源代碼,沒有看到任何會導致此問題的東西。下面是從PdfEncryption.setupAllKeys相關代碼:
permissions |= (revision == STANDARD_ENCRYPTION_128 || revision == AES_128 || revision == AES_256) ? 0xfffff0c0
: 0xffffffc0;
permissions &= 0xfffffffc;
第一行是做一個OR所以不會刪除任何權限;第二行是根據PDF規範將兩個最右邊的位置設置爲0。
我在想,如果這是一個iText的事情,PDF的事情,或者如果我做了其他的錯誤。
感謝
*只需註釋掉第121行和第122行* - 我假設您的意思是if(!reader.isOpenedWithFullPermissions())會拋出......'行。該編輯是**不是必需的,參見。 [這個答案](http://stackoverflow.com/questions/17666577/opening-password-protected-pdf-file-with-itextsharp/17694943#17694943),只需設置PdfReader.unethicalreading = true後確保你確實有權忽略密碼保護帶來的限制。 – mkl
感謝提示@mkl。不幸的是,這不**允許「更改文檔」,「文檔組裝」,「內容複製」和「頁面提取」(改變源代碼)。至少那是我所經歷的。 – beatngu13
這會讓人感到意外,因爲兩者基本上都是一樣的,它們都能防止異常。 – mkl