加密 PDF 文档(Encrypting a PDF Document)
在上一章中,我们已经了解了如何在PDF文档中插入图像。 在本章中,我们将讨论如何加密PDF文档。
加密PDF文档
您可以使用StandardProtectionPolicy和AccessPermission classes提供的方法加密PDF文档。
AccessPermission类用于通过为其分配访问权限来保护PDF文档。 使用此类,您可以限制用户执行以下操作。
- 打印文档
- 修改文档的内容
- 复制或提取文档的内容
- 添加或修改注释
- 填写交互式表单字段
- 提取文本和图形,以便为视障人士提供便利
- 组装文档
- Print in degraded quality
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();
例子 (Example)
假设,我们在路径C:/PdfBox_Examples/有一个名为sample.pdf的PDF文档,其中包含空页,如下所示。
此示例演示如何加密上述PDF文档。 在这里,我们将加载名为sample.pdf的PDF文档并对其进行加密。 将此代码保存在名为EncriptingPDF.java.的文件中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 ,则不能,因为它已加密。 相反,它会提示输入密码以打开文档,如下所示。