Java:如何加密或解密PDF文档?

打印 上一主题 下一主题

主题 954|帖子 954|积分 2862

在工作中,我们会将重要的文档进行加密,并且设置用户的访问权限,其他外部人员均无法打开,只有获取该权限的用户才有资格打开文档。此外,限制用户的使用权限,极大程度上阻止了那些有意要篡改、拷贝其中内容的人,提高文档的安全性。与此同时,文档加密的另一大作用是为了防止丢失,因为可能存在员工出差或离职时,将文档有意或无意的删除,造成文档丢失的现象,从而导致公司的业务和形象受到一定影响。那么我们如何才能加密PDF文档呢?加密文档之后又该如何解密呢?下面篇文章就详细介绍了如何以编程的方式,通过Java代码加密或解密PDF文档。

  • 使用密码加密 PDF 文档
  • 移除 PDF 文档的密码
代码编译环境:

IntelliJ IDEA 2019(jdk 1.8.0)
PDF Jar包:Free Spire.PDF for Java 5.1.0
引入jar

导入方法1:
手动引入。将Free Spire.PDF for Java下载到本地,解压,找到lib文件夹下的Spire.PDF.jar文件。在IDEA中打开如下界面,将本地路径中的jar文件引入Java程序:

导入方法2:如果您想通过 Maven安装,则可以在 pom.xml 文件中添加以下代码导入 JAR 文件。
  1. <repositories>
  2.         <repository>
  3.             <id>com.e-iceblue</id>
  4.             <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
  5.         </repository>
  6.     </repositories>
  7. <dependencies>
  8.     <dependency>
  9.         <groupId>e-iceblue</groupId>
  10.         <artifactId>spire.pdf.free</artifactId>
  11.         <version>5.1.0</version>
  12.     </dependency>
  13. </dependencies>
复制代码
使用密码加密 PDF 文档

可以用于加密 PDF 文档的密码有两种:打开密码和权限密码。打开密码可以限制其他人打开 PDF 文档,必须输入密码才能查看有打开密码的 PDF 文档。而权限密码则可以限制对文档进行操作,如打印、复制、评论等。当一个 PDF 文档被同时用这两种密码加密时,可以使用其中任意一种来打开 PDF 文档。

  • 创建 PdfDocument 的对象。
  • 使用 PdfDocument.loadFromFile() 方法载入 PDF 文件。
  • 设置打开密码、权限密码、密钥大小以及权限。
  • 使用 PdfDocument.getSecurity().encrypt(java.lang.String openPassword, java.lang.String permissionPassword, java.util.EnumSet permissions, PdfEncryptionKeySize keySize) 方法加密文档。
  • 使用 PdfDocument.saveToFile() 方法保存 PDF 文件。
完整代码

Java
  1. import java.util.EnumSet;
  2. import com.spire.pdf.PdfDocument;
  3. import com.spire.pdf.security.PdfEncryptionKeySize;
  4. import com.spire.pdf.security.PdfPermissionsFlags;
  5. public class encryptPDF {
  6.     public static void main(String[] args) {
  7.         //创建PdfDocument的对象
  8.         PdfDocument pdf = new PdfDocument();
  9.         //载入PDF文件
  10.         pdf.loadFromFile("收购XXX公司项目.pdf");
  11.         //加密文档
  12.         PdfEncryptionKeySize keySize = PdfEncryptionKeySize.Key_128_Bit;
  13.         String openPassword = "password";
  14.         String permissionPassword = "permission";
  15.         EnumSet flags = EnumSet.of(PdfPermissionsFlags.Print, PdfPermissionsFlags.Fill_Fields);
  16.         pdf.getSecurity().encrypt(openPassword, permissionPassword, flags, keySize);
  17.         //保存文档
  18.         pdf.saveToFile("加密.pdf");
  19.         pdf.close();
  20.     }
  21. }
复制代码
效果图


移除 PDF 文档的密码

如需解密 PDF 文件,可以使用将打开密码和权限密码设置为空,从而去掉密码。以下是详细操作步骤:

  • 创建 PdfDocument 的对象。
  • 使用 PdfDocument.loadFromFile(java.lang.String filename, java.lang.String password) 方法载入加密的 PDF 文件。
  • 使用 PdfDocument.getSecurity().encrypt(java.lang.String openPassword, java.lang.String permissionPassword, java.util.EnumSet permissions, PdfEncryptionKeySize keySize, java.lang.String originalPermissionPassword) 方法将打开密码和权限密码设置为空,以解密文档。
  • 使用 PdfDocument.saveToFile() 方法保存 PDF 文件。
完整代码

Java
  1. import com.spire.pdf.PdfDocument;
  2. import com.spire.pdf.security.PdfEncryptionKeySize;
  3. import com.spire.pdf.security.PdfPermissionsFlags;
  4. public class decryptPDF {
  5.     public static void main(String[] args) {
  6.         //创建PdfDocument的对象
  7.         PdfDocument pdf = new PdfDocument();
  8.         //使用密码载入加密的PDF文档
  9.         pdf.loadFromFile("加密.pdf", "password");
  10.         //解密文档
  11.         pdf.getSecurity().encrypt("", "", PdfPermissionsFlags.getDefaultPermissions(), PdfEncryptionKeySize.Key_256_Bit, "permission");
  12.         //保存文件
  13.         pdf.saveToFile("解密.pdf");
  14.         pdf.close();
  15.     }
  16. }
复制代码
效果图


—本文完—

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表