无涯教程-PDFBox - PDF加密

327 阅读2分钟

在上一章中,无涯教程已经了解了如何在PDF文档中插入图像。在本章中将讨论如何加密PDF文档。

您可以使用 StandardProtectionPolicyAccessPermission类提供的方法对PDF文档进行加密。

AccessPermission 类用于通过为PDF文档分配访问权限来保护它。

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

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

步骤1 - 加载现有文档

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

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

步骤2 - 创建访问权限对象

实例化 AccessPermission 类,如下所示。

AccessPermission accessPermission=new AccessPermission();

步骤3 - 创建加密对象

通过传递所有者密码,用户密码和 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();

完整示例

假设无涯教程在路径C:/ PdfBox_Examples /中有一个名为sample.pdf的PDF文档,其空页面如下所示。

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 { //加载现有文档 File file = new File("C:/PdfBox_Examples/sample.pdf"); PDDocument document = PDDocument.load(file);

  </span><span class="com">//创建访问权限对象</span><span class="pln">
  </span><span class="typ">AccessPermission</span><span class="pln"> ap </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">AccessPermission</span><span class="pun">();</span><span class="pln">         

  </span><span class="com">//创建标准化的支持policy对象</span><span class="pln">
  </span><span class="typ">StandardProtectionPolicy</span><span class="pln"> spp </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">StandardProtectionPolicy</span><span class="pun">(</span><span class="str">"1234"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"1234"</span><span class="pun">,</span><span class="pln"> ap</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//设置加密密钥的长度</span><span class="pln">
  spp</span><span class="pun">.</span><span class="pln">setEncryptionKeyLength</span><span class="pun">(</span><span class="lit">128</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//设置访问权限</span><span class="pln">
  spp</span><span class="pun">.</span><span class="pln">setPermissions</span><span class="pun">(</span><span class="pln">ap</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//保护文件</span><span class="pln">
  document</span><span class="pun">.</span><span class="pln">protect</span><span class="pun">(</span><span class="pln">spp</span><span class="pun">);</span><span class="pln">

  </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Document encrypted"</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//保存文档</span><span class="pln">
  document</span><span class="pun">.</span><span class="pln">save</span><span class="pun">(</span><span class="str">"C:/PdfBox_Examples/sample.pdf"</span><span class="pun">);</span><span class="pln">
  </span><span class="com">//关闭文件</span><span class="pln">
  document</span><span class="pun">.</span><span class="pln">close</span><span class="pun">();</span><span class="pln">

} }

使用以下命令从命令提示符处编译并执行保存的Java文件。

javac EncriptingPDF.java
java EncriptingPDF

执行后,上述程序会加密显示以下消息的给定PDF文档。

Document encrypted

如果您尝试打开文档 sample.pdf ,则由于已加密,因此无法打开。而是,提示您键入密码以打开文档,如下所示。

Document encryption

参考链接

www.learnfk.com/pdfbox/pdfb…