Pdfbox 简明教程

PDFBox - Encrypting a PDF Document

在上一章中,我们已经了解如何向 PDF 文档中插入图片。在本章中,我们讨论如何加密 PDF 文档。

Encrypting a PDF Document

可以使用 StandardProtectionPolicyAccessPermission classes 提供的方法加密 PDF 文档。

AccessPermission 类用于通过向 PDF 文档分配访问权限来保护它。使用此类,可以限制用户执行以下操作。

  1. Print the document

  2. 修改文档的内容

  3. 复制或提取文档内容

  4. Add or modify annotations

  5. 填写交互式表单字段

  6. 提取文本和图形以供视力障碍人士使用

  7. Assemble the document

  8. Print in degraded quality

StandardProtectionPolicy 类用于为文档添加基于密码的保护。

以下是加密现有 PDF 文档的步骤。

Step 1: Loading an Existing PDF Document

使用 PDDocument 类的静态方法 load() 加载现有 PDF 文档。此方法接受一个文件对象作为参数,因为这是一个静态方法,您可使用类名调用它,如下所示:

File file = new File("path of the document")
PDDocument document = PDDocument.load(file);

Step 2: Creating Access Permission Object

实例化 AccessPermission 类,如下所示。

AccessPermission accessPermission = new AccessPermission();

Step 3: Creating StandardProtectionPolicy Object

使用 StandardProtectionPolicy 类,通过传递所有者密码、用户密码和 AccessPermission 对象,按照如下所示进行实例化。

StandardProtectionPolicy spp = new StandardProtectionPolicy("1234","1234",accessPermission);

Step 4: Setting the Length of the Encryption Key

使用 setEncryptionKeyLength() 方法设置加密密钥长度,按照如下所示进行。

spp.setEncryptionKeyLength(128);

Step 5: Setting the Permissions

使用 StandardProtectionPolicy 类的 setPermissions() 方法设置权限。此方法接受 AccessPermission 对象作为参数。

spp.setPermissions(accessPermission);

Step 6: Protecting the Document

您可以使用 PDDocument 类的 protect() 方法来保护您的文档,按照如下所示进行。将 StandardProtectionPolicy 对象作为参数传递给此方法。

document.protect(spp);

Step 7: Saving the Document

添加所需内容后,使用 PDDocument 类的 save() 方法保存 PDF 文档,如下面的代码块所示。

document.save("Path");

Step 8: Closing the Document

最后,按照 PDDocumentclose() 方法,关闭文档。如下所示。

document.close();

Example

假设我们有一个名为 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