在前一章中,我們已經看到了如何在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 = 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();
假設有一個PDF文件:sample.pdf,所在目錄為:F:\worksp\pdfbox,其空頁如下所示。
這個例子演示了如何加密上面提到的PDF文件。 在這裡,將載入名稱為sample.pdf 的PDF文件並對其進行加密。 將此程式碼儲存在EncriptingPDF.java
檔案中。
package com.yiibai;
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("F:/worksp/pdfbox/sample.pdf");
PDDocument document = PDDocument.load(file);
//Creating access permission object
AccessPermission ap = new AccessPermission();
//Creating StandardProtectionPolicy object
StandardProtectionPolicy spp = new StandardProtectionPolicy("123456", "123456", 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("F:/worksp/pdfbox/sample-encript.pdf");
//Closing the document
document.close();
}
}
執行時,上述程式會加密顯示以下訊息的給定PDF文件。
Document encrypted
如果嘗試開啟文件sample-encript.pdf,則它會提示輸入密碼以開啟文件,因為它是加密的,如下所示。
在輸入密碼後,文件應該可以正確開啟。