我們有一個Web應用程序,它使用iText生成報告並以pdf格式保存。我們希望阻止用戶從該文件複製內容。我認爲這可以通過將PDF內容轉換爲圖像,然後將該圖像添加到PDF中實現,但似乎iText無法將PDF轉換爲圖像。防止複製使用iText生成的pdf內容
有沒有一種方法可以使用iText來做到這一點?
我們有一個Web應用程序,它使用iText生成報告並以pdf格式保存。我們希望阻止用戶從該文件複製內容。我認爲這可以通過將PDF內容轉換爲圖像,然後將該圖像添加到PDF中實現,但似乎iText無法將PDF轉換爲圖像。防止複製使用iText生成的pdf內容
有沒有一種方法可以使用iText來做到這一點?
正如@YuriyGalanter所指出的,PDF中的限制性權限主要是在PDF加密的上下文中定義的。 PDF規範ISO 32000-1:2008的節7.6.3.1:
如果指定的密碼或訪問限制,該文檔將被加密的,並驗證密碼所需的權限和信息應被存儲在加密字典。只有文件附件被加密的文檔應使用與用戶和所有者密碼相同的密碼。
用正確的所有者密碼打開文檔應允許完整(所有者)訪問文檔。這種無限制訪問包括更改文檔密碼和訪問權限的能力。
使用正確的用戶密碼打開文檔(或使用默認密碼打開文檔)應允許根據文檔的加密字典中指定的用戶訪問權限執行其他操作。
因此,如果PDF是使用所有者密碼但沒有用戶密碼進行加密,任何人都可以打開PDF並且被加密時所選擇的權限的限制。只有使用其所有者密碼打開PDF的用戶才能無限制地訪問PDF。
很明顯,這樣的方案可以很容易地被打破和'保護刪除。這取決於PDF處理軟件的道德行爲。
iText in Action — 2nd Edition第12章中的示例EncryptionPdf.java演示瞭如何使用iText應用加密。
的方法createPdf
說明如何創建一個新的PDF文件時使用加密技術:
public void createPdf(String filename) throws IOException, DocumentException {
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
writer.setEncryption(USER, OWNER, PdfWriter.ALLOW_PRINTING, PdfWriter.STANDARD_ENCRYPTION_128);
writer.createXmpMetadata();
// step 3
document.open();
// step 4
document.add(new Paragraph("Hello World"));
// step 5
document.close();
}
的方法encryptPdf
說明了如何將現有的PDF加密:
public void encryptPdf(String src, String dest) throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.setEncryption(USER, OWNER,
PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
stamper.close();
reader.close();
}
這裏USER
和OWNER
是用戶和上面提到的所有者密碼。
樣品只設置一個權限,PdfWriter.ALLOW_PRINTING
;還有其他幾種,只需檢查所有ALLOW_*
PdfWriter.
的常量
感謝@mkl , 有用。我想如果使用setEncryption(),那麼需要輸入密碼才能打開文件。但只是發現,如果只提供OWNER密碼,那麼打開文件時不需要密碼,並且在權限中不包括PdfWriter.ALLOW_COPYING,我們的目的也被解決了。再次感謝 :) – AndyT 2013-05-07 22:22:35
即使圖像也不會阻止複製,它們可以很容易地被OCR,因此它不是一種真正的保護。 – 2013-05-07 18:16:39
@YuriyGalanter沒錯。有沒有其他方法可以防止使用iText複製PDF文件的內容? – AndyT 2013-05-07 18:29:00
我還沒有廣泛地起訴iText,但它看起來像加密是票 - 看看這個線程是否有幫助:http://www.coderanch。COM/T/329511/JAVA/JAVA /撤銷的許可 - 保存 - 複製PDF – 2013-05-07 18:36:04