PDFBox加密PDF文檔

在前一章中,我們已經看到了如何在PDF文檔中插入圖像。 在本章中,我們將學習如何加密PDF文檔。

加密PDF文檔

使用StandardProtectionPolicyAccessPermission類提供的方法加密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,其空頁如下所示。

PDFBox加密PDF文檔

這個例子演示瞭如何加密上面提到的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,則它會提示輸入密碼以打開文檔,因爲它是加密的,如下所示。
PDFBox加密PDF文檔

在輸入密碼後,文檔應該可以正確打開。