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
广告