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/** 中,其中包含空頁面,如下所示。

Sample Document

此示例演示如何加密上述 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** 文件,則無法開啟,因為它已加密。相反,它會提示您輸入密碼以開啟文件,如下所示。

Document encryption
廣告

© . All rights reserved.