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

yizhihongxing

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

相关文章

  • 详解Java中雪花算法的实现

    详解Java中雪花算法的实现 需求概述 在分布式系统中,为了保证业务数据的唯一性,需要生成唯一的ID。传统的ID生成方式可能出现因为高并发而重复的情况,而雪花算法(Snowflake)正是为了解决这个问题而出现的。 本文会详细介绍Java中雪花算法的实现,及其原理。 雪花算法的基本原理 雪花算法是Twitter开源的分布式ID生成算法,采用一个64位的lon…

    Java 2023年5月19日
    00
  • jquery中的ajax异步上传

    下面是关于jQuery中的Ajax异步上传的完整攻略: 什么是Ajax异步上传 在之前不使用Ajax时,文件上传只能通过表单提交的方式,整个页面都要刷新。而现在采用Ajax提交方式,在页面不重载的情况下,上传文件并得到服务器端的响应。 异步上传的详细实现步骤: 设置一个表单,包含一个文件上传控件 <form action="your-url&…

    Java 2023年5月20日
    00
  • Java 常量字符串过长的解决方法

    Java 常量字符串过长的解决方法主要包括以下两种方式: 1. 使用换行符 Java中可以使用换行符\将一行代码分成多行,这也适用于字符串常量。可以在字符串过长的地方使用\将字符串分割成多行,从而解决字符串过长的问题。 示例代码: String str = "这是一个非常长的字符串,我们可以在适当的位置使用\"\\\"将它分成多…

    Java 2023年5月26日
    00
  • 分布式Hibernate search详解

    分布式Hibernate Search详解 什么是Hibernate Search? Hibernate Search是一个用于全文搜索的Java库,它使用Apache Lucene底层实现,并集成了Hibernate ORM框架。使用Hibernate Search,我们可以很方便地实现复杂的搜索功能,例如全文搜索、过滤、排序和聚合等。 什么是分布式Hib…

    Java 2023年5月20日
    00
  • Java源码解析阻塞队列ArrayBlockingQueue常用方法

    接下来我将详细讲解Java源码解析阻塞队列ArrayBlockingQueue常用方法的完整攻略。 1. 阻塞队列ArrayBlockingQueue Java中的阻塞队列是一个支持等待队列的数据结构。因为是“阻塞”的,所以当队列为空时,试图从队列中获取元素的线程会被阻塞,同样当队列已满时,试图向队列中添加元素的线程也会被阻塞。 ArrayBlockingQ…

    Java 2023年5月26日
    00
  • Java编程中更新XML文档的常用方法

    当需要更新XML文档时,Java编程中有多种常用的方法。本文将介绍Java编程中经常使用的两种方法。 方法一:使用DOM编程 DOM(文档对象模型)是一种Java内置的XML解析器。通常,使用DOM解析XML文档时,会将整个XML文件加载到内存中,构建一个XML的DOM树,程序员可以通过修改DOM树的方式来实现对XML文件的更新操作。 示例一:添加一个节点 …

    Java 2023年6月15日
    00
  • java导出到excel常用的几种方式总结

    Java导出到Excel常用的几种方式总结 在Java的开发中,我们经常会遇到将数据导出到Excel表格的需求。本文主要总结了Java导出到Excel常用的几种方式,包括使用POI、EasyExcel等框架实现导出,以及使用CSV格式和HTML格式导出的方法。 使用POI实现导出 Apache POI是一个Java API,用于处理Microsoft Off…

    Java 2023年5月26日
    00
  • Java基础-Java的体系结构

    Java的体系结构 Java的体系结构包含三个核心部分:JVM、JRE和JDK。其中JDK是对JRE的扩展,而JRE又是对JVM的扩展。 JVM JVM,即Java虚拟机,是Java平台的最核心部分。它是Java的运行环境,其作用是将Java字节码文件解释成能够在特定操作系统中运行的机器语言,并将其加载到内存中。 Java语言的跨平台特性正是由JVM所实现的…

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