PDFBox - 加密 PDF 文档
在上一章中,我们了解了如何在 PDF 文档中插入图像。在本章中,我们将讨论如何加密 PDF 文档。
加密 PDF 文档
您可以使用 StandardProtectionPolicy 和 AccessPermission 类 提供的方法加密 PDF 文档。
AccessPermission 类用于通过为 PDF 文档分配访问权限来保护它。使用此类,您可以限制用户执行以下操作。
- 打印文档
- 修改文档内容
- 复制或提取文档内容
- 添加或修改注释
- 填写交互式表单字段
- 提取文本和图形,方便视障人士使用
- 组装文档
- 以降级质量打印
StandardProtectionPolicy 类用于为文档添加基于密码的保护。
以下是加密现有 PDF 文档的步骤。
步骤 1:加载现有 PDF 文档
使用 的静态方法 load() 加载现有 PDF 文档PDDocument 类。此方法接受文件对象作为参数,因为这是一个静态方法,您可以使用类名调用它,如下所示。
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();
示例
假设,我们有一个名为 sample.pdf 的 PDF 文档,位于路径 C:/PdfBox_Examples/,其中有空白页,如下所示。

此示例演示如何加密上述 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 { //加载现有文档 File file = new File("C:/PdfBox_Examples/sample.pdf"); PDDocument document = PDDocument.load(file); //创建访问权限对象 AccessPermission ap = new AccessPermission(); //创建 StandardProtectionPolicy 对象 StandardProtectionPolicy spp = new StandardProtectionPolicy("1234", "1234", ap); //设置加密密钥的长度 spp.setEncryptionKeyLength(128); //设置访问权限 spp.setPermissions(ap); //保护文档 document.protect(spp); System.out.println("Document encrypted"); //保存文档 document.save("C:/PdfBox_Examples/sample.pdf"); //关闭文档 document.close(); } }
使用以下命令从命令提示符编译并执行已保存的 Java 文件。
javac EncriptingPDF.java java EncriptingPDF
执行后,上述程序将加密给定的 PDF 文档,并显示以下消息。
Document encrypted
如果您尝试打开文档 sample.pdf,则无法打开,因为它已加密。相反,它会提示您输入密码以打开文档,如下所示。
