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

在工作中,我们会将重要的文档进行加密,并且设置用户的访问权限,其他外部人员均无法打开,只有获取该权限的用户才有资格打开文档。此外,限制用户的使用权限,极大程度上阻止了那些有意要篡改、拷贝其中内容的人,提高文档的安全性。与此同时,文档加密的另一大作用是为了防止丢失,因为可能存在员工出差或离职时,将文档有意或无意的删除,造成文档丢失的现象,从而导致公司的业务和形象受到一定影响。那么我们如何才能加密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程序:

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

导入方法2:如果您想通过 Maven安装,则可以在 pom.xml 文件中添加以下代码导入 JAR 文件。

<repositories>

        <repository>

            <id>com.e-iceblue</id>

            <url>https://repo.e-iceblue.cn/repository/maven-public/</url>

        </repository>

    </repositories>

<dependencies>

    <dependency>

        <groupId>e-iceblue</groupId>

        <artifactId>spire.pdf.free</artifactId>

        <version>5.1.0</version>

    </dependency>

</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<PdfPermissionsFlags> permissions, PdfEncryptionKeySize keySize) 方法加密文档。
  • 使用 PdfDocument.saveToFile() 方法保存 PDF 文件。

完整代码

Java

import java.util.EnumSet;

import com.spire.pdf.PdfDocument;
import com.spire.pdf.security.PdfEncryptionKeySize;
import com.spire.pdf.security.PdfPermissionsFlags;

public class encryptPDF {
    public static void main(String[] args) {

        //创建PdfDocument的对象
        PdfDocument pdf = new PdfDocument();

        //载入PDF文件
        pdf.loadFromFile("收购XXX公司项目.pdf");

        //加密文档
        PdfEncryptionKeySize keySize = PdfEncryptionKeySize.Key_128_Bit;
        String openPassword = "password";
        String permissionPassword = "permission";
        EnumSet flags = EnumSet.of(PdfPermissionsFlags.Print, PdfPermissionsFlags.Fill_Fields);
        pdf.getSecurity().encrypt(openPassword, permissionPassword, flags, keySize);

        //保存文档
        pdf.saveToFile("加密.pdf");
        pdf.close();
    }
}

效果图

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

移除 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<PdfPermissionsFlags> permissions, PdfEncryptionKeySize keySize, java.lang.String originalPermissionPassword) 方法将打开密码和权限密码设置为空,以解密文档。
  • 使用 PdfDocument.saveToFile() 方法保存 PDF 文件。

完整代码

Java

import com.spire.pdf.PdfDocument;
import com.spire.pdf.security.PdfEncryptionKeySize;
import com.spire.pdf.security.PdfPermissionsFlags;

public class decryptPDF {
    public static void main(String[] args) {

        //创建PdfDocument的对象
        PdfDocument pdf = new PdfDocument();

        //使用密码载入加密的PDF文档
        pdf.loadFromFile("加密.pdf", "password");

        //解密文档
        pdf.getSecurity().encrypt("", "", PdfPermissionsFlags.getDefaultPermissions(), PdfEncryptionKeySize.Key_256_Bit, "permission");

        //保存文件
        pdf.saveToFile("解密.pdf");
        pdf.close();
    }
}

效果图

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

—本文完—

原文链接:https://www.cnblogs.com/Carina-baby/p/17315318.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java:如何加密或解密PDF文档? - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • SpringMVC通过模型视图ModelAndView渲染视图的实现

    SpringMVC是一种基于MVC架构模式的Web框架,它可以让开发者更加简便地开发Web应用程序。在SpringMVC中,渲染视图是关键步骤之一。SpringMVC借助于视图解析器(ViewResolver)将ModelAndView对象中的模型数据渲染成视图,输出给浏览器。 以下是SpringMVC通过模型视图ModelAndView渲染视图的实现攻略:…

    Java 2023年6月15日
    00
  • Spring配置数据源的三种方式(小结)

    下面我来为你讲解Spring配置数据源的三种方式的详细攻略。 1. Spring配置数据源的三种方式 Spring配置数据源的三种方式分别是: 通过声明式的XML配置文件配置数据源 使用基于注解的配置方式配置数据源 基于Java代码的方式配置数据源 下面,我们将详细介绍这三种配置方式。 1.1 通过声明式的XML配置文件配置数据源 使用XML配置文件配置数据…

    Java 2023年5月20日
    00
  • 解决zuulGateway网关添加路由异常熔断问题

    解决zuulGateway网关添加路由异常熔断问题 在使用zuulGateway网关时,我们经常需要通过动态添加路由的方式来实现API转发。然而,在高并发或者复杂路由规则时,动态添加路由可能会引发Unexpected error in route导致熔断。本文将详细介绍如何通过修改zuulGateway配置来解决该问题。 问题描述 在使用zuulGatewa…

    Java 2023年5月26日
    00
  • 美团面经总结(2023最新)

    分享一份读者面试美团的面经,比较有参考性,感兴趣的可以看看~ 一面 消息队列如何保证可靠性 消息队列如何保证消息幂等性 消息队列的优缺点 为什么用b+树 聚集索引和主键区别,其他引擎怎么做的 平时数据库编码 explain参数 http报文参数有哪些吗? 做题,链表奇偶有序输出 二面 自我介绍 有哪些排序算法? 介绍下快排/堆排/归并排序。 数据库中的索引应…

    Java 2023年5月7日
    00
  • java邮件乱码的彻底解决方案

    下面是“Java邮件乱码的彻底解决方案”的完整攻略: 1. 问题描述 在使用Java程序发送邮件时,邮件内容中的中文字符可能会出现乱码现象,特别是在收件人使用的邮件客户端接收邮件时。如何避免这个问题,保证邮件内容能够正常显示呢? 2. 解决方案 Java发送邮件的原理是通过SMTP协议将纯文本或HTML格式的内容发送到邮件服务器,然后由邮件服务器将邮件传递到…

    Java 2023年5月20日
    00
  • SpringSecurity之SecurityContextHolder使用解读

    SpringSecurity之SecurityContextHolder使用解读 SecurityContextHolder SecurityContextHolder是SpringSecurity提供的一个便捷类,用于在应用程序中存放安全上下文信息。 该类采用了ThreadLocal模式存储安全上下文信息,保证安全上下文信息仅在当前线程中使用。当然,通过暴…

    Java 2023年5月20日
    00
  • Java如何分析算法的时间和空间复杂度

    要分析算法的时间和空间复杂度,我们需要了解算法的执行效率以及所占用的内存空间。Java提供一些实用的工具来帮助我们进行分析。具体步骤如下。 1. 编写算法代码 首先,我们需要编写一个算法的代码示例。这个算法可以是排序、查找、遍历等等。为了方便演示,我们这里以一个简单的冒泡排序算法为例: public static void bubbleSort(int[] …

    Java 2023年5月19日
    00
  • SpringBoot实现单文件与多文件上传功能

    下面是关于“SpringBoot实现单文件与多文件上传功能”的完整攻略: 1. 单文件上传功能实现 1.1. 添加依赖 首先,在pom.xml文件中添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sprin…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部