PDFBox - 加密 PDF 文件
在上一章中,我們學習瞭如何在 PDF 文件中插入圖片。在本節中,我們將討論如何加密 PDF 文件。
加密 PDF 文件
您可以使用 **StandardProtectionPolicy** 和 **AccessPermission 類** 提供的方法來加密 PDF 文件。
**AccessPermission** 類用於透過分配訪問許可權來保護 PDF 文件。使用此類,您可以限制使用者執行以下操作。
- 列印文件
- 修改文件內容
- 複製或提取文件內容
- 新增或修改註釋
- 填寫互動式表單欄位
- 提取文字和圖形,以便視力障礙者訪問
- 組裝文件
- 以降級質量列印
**StandardProtectionPolicy** 類用於為文件新增基於密碼的保護。
以下是加密現有 PDF 文件的步驟。
步驟 1:載入現有 PDF 文件
使用 **PDDocument** 類的靜態方法 **load()** 載入現有 PDF 文件。此方法接受檔案物件作為引數,由於這是一個靜態方法,您可以使用類名呼叫它,如下所示。
File file = new File("path of the document")
PDDocument document = PDDocument.load(file);
步驟 2:建立 AccessPermission 物件
如下所示例項化 **AccessPermission** 類。
AccessPermission accessPermission = new AccessPermission();
步驟 3:建立 StandardProtectionPolicy 物件
透過傳遞所有者密碼、使用者密碼和 **AccessPermission** 物件來例項化 **StandardProtectionPolicy** 類,如下所示。
StandardProtectionPolicy spp = new StandardProtectionPolicy("1234","1234",accessPermission);
步驟 4:設定加密金鑰長度
使用 **setEncryptionKeyLength()** 方法設定加密金鑰長度,如下所示。
spp.setEncryptionKeyLength(128);
步驟 5:設定許可權
使用 StandardProtectionPolicy 類的 **setPermissions()** 方法設定許可權。此方法接受 **AccessPermission** 物件作為引數。
spp.setPermissions(accessPermission);
步驟 6:保護文件
您可以使用 **PDDocument** 類的 **protect()** 方法來保護您的文件,如下所示。將 **StandardProtectionPolicy** 物件作為引數傳遞給此方法。
document.protect(spp);
步驟 7:儲存文件
新增所需內容後,使用 **PDDocument** 類的 **save()** 方法儲存 PDF 文件,如下面的程式碼塊所示。
document.save("Path");
步驟 8:關閉文件
最後,使用 **PDDocument** 類的 **close()** 方法關閉文件,如下所示。
document.close();
示例
假設我們有一個名為 **sample.pdf** 的 PDF 文件,位於路徑 **C:/PdfBox_Examples/** 中,其中包含空頁面,如下所示。
此示例演示如何加密上述 PDF 文件。在這裡,我們將載入名為 **sample.pdf** 的 PDF 文件並對其進行加密。將此程式碼儲存在名為 **EncriptingPDF.java** 的檔案中。
import java.io.File;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;
public class EncriptingPDF {
public static void main(String args[]) throws Exception {
//Loading an existing document
File file = new File("C:/PdfBox_Examples/sample.pdf");
PDDocument document = PDDocument.load(file);
//Creating access permission object
AccessPermission ap = new AccessPermission();
//Creating StandardProtectionPolicy object
StandardProtectionPolicy spp = new StandardProtectionPolicy("1234", "1234", ap);
//Setting the length of the encryption key
spp.setEncryptionKeyLength(128);
//Setting the access permissions
spp.setPermissions(ap);
//Protecting the document
document.protect(spp);
System.out.println("Document encrypted");
//Saving the document
document.save("C:/PdfBox_Examples/sample.pdf");
//Closing the document
document.close();
}
}
使用以下命令從命令提示符編譯並執行儲存的 Java 檔案。
javac EncriptingPDF.java java EncriptingPDF
執行後,上述程式將加密給定的 PDF 文件,並顯示以下訊息。
Document encrypted
如果您嘗試開啟 **sample.pdf** 文件,則無法開啟,因為它已加密。相反,它會提示您輸入密碼以開啟文件,如下所示。