PDF加密、分割和生成封面图操作

由于某些不可抗力原因,公司不允许使用itext系列的jar包,因此系统中使用的相关jar得替换成开源的。经比较和尝试考虑使用org.apache.pdfbox来替换,同时修改系统中原有的方法,发现比itext系列稍显简洁一点,记录如下:

加密文件

/**
     * 加密文件测试
     * @date 2022/4/7
     */
    @Test
    public void encryptTest(){
        try {
            String filePath = "D:\\test\\像李开复一样思考人生.pdf";
            String password = "1234";
            PDDocument document = PDDocument.load(new File(filePath));
            StandardProtectionPolicy spp = new StandardProtectionPolicy(password, password,new AccessPermission());
            document.protect(spp);
            String newFilePath = "D:\\test\\像李开复一样思考人生2.pdf";
            document.save(newFilePath);
            document.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

切割文件

/**
     * 切割文件测试
     * @date 2022/4/7
     */
    @Test
    public void extractTest(){
        try {
            String newFilePath = "D:\\test\\像李开复一样思考人生2.pdf";
            String password = "1234";
            PDDocument document = PDDocument.load(new File(newFilePath), password);//带密码读取
            //从第一页截取到第二页
            PageExtractor pageExtractor = new PageExtractor(document, 1, 2);
            PDDocument extract = pageExtractor.extract();
            extract.save("D:\\test\\像李开复一样思考人生free.pdf");
            extract.close();
            document.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }

生成封面图

/**
     * 切割文件测试
     * @date 2022/4/7
     */
    @Test
    public void createCoverPicTest(){
        try {
            String pdfPath = "D:\\test\\像李开复一样思考人生.pdf";
            File file = new File(pdfPath);
            //order目录
            String orderPath = file.getParent();
            //转换后的img目录
            String bookName = file.getName().substring(0,file.getName().lastIndexOf("."));
            String imgPath = orderPath + File.separator +bookName+".png";
            log.debug("pdf封面图生成成功:{}", imgPath);
            PDDocument pdDocument = PDDocument.load(new File(pdfPath));
            PDFRenderer renderer = new PDFRenderer(pdDocument);
            /* 第二位参数越大转换后越清晰,相对转换速度越慢 */
            BufferedImage image = renderer.renderImageWithDPI(0, 150);
            ImageIO.write(image, "png", new File(imgPath));

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

总结一下,现在的工具都比较丰富了,不需要自己去造轮子,

step-1 去maven仓库检索同类型的包,比较一下热度和使用人数
step-2 下载对应包的source源代码,看一下框架整体结构,里面都有哪些package和类,不知道类是干什么的,可以看一下类上面的注释,一般都是比较简单的英文
step-3 动手写单元测试进行验证。

Original: https://www.cnblogs.com/xieshuang/p/16114094.html
Author: 河岸飞流
Title: PDF加密、分割和生成封面图操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/571638/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Kubernetes-Volume

    1. 简介 我们都知道 Container 中的文件在磁盘上是临时存放的,这给 Container 中运行的较重要的应用 程序带来一些问题。 是当容器崩溃时文件丢失。(kubele…

    Java 2023年6月7日
    0105
  • 顺序存储二叉树

    顺序存储二叉树的概念 从数据存储来看,数组存储方式和树的存储方式可以相互转换,即 数组可以转换成树, 树也可以转换成数组, 看下面的示意图。 要求: 右图的二叉树的结点,要求以数组…

    Java 2023年6月15日
    0108
  • 子串次数——类似KMP

    老规矩 先来看问题 字符串a 在A中出现了多少次 求次数 。 当然有很多种算法 最简单的 一个一个找呗 不过这种太麻烦 我们不讲这种 我在写这个算法的时候 用到了KMP算法的部分内…

    Java 2023年6月5日
    087
  • waynboot商城发布啦,整合了Redis、RabbitMQ、ElasticSearch等常用中间件, 根据生产环境开发经验而来不断完善、优化、改进中

    waynboot-mall项目 觉得有用的铁子们给个star就行了,求求你们啦😘😍 waynboot-mall是一套全部开源的微商城项目,包含一个运营后台、h5商城和后台接口。实现…

    Java 2023年6月14日
    092
  • VMware安装虚拟机详细步骤

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    089
  • mysql事务干货详解

    说明: mysql是现在行业中流行的关系型数据库,它的核心是存储引擎。mysql的存储引擎有很多种我们可以通过命令查看如下 SHOW ENGINES 不同版本得到的数据不一样,我们…

    Java 2023年6月5日
    083
  • instanceof和Class.isAssignableFrom的区别

    偶然看见同事写的一段代码是这样的 if( AfterRender.class.isAssignableFrom( assembly.getClass() ) ){ afterRen…

    Java 2023年6月5日
    092
  • Springboot国际化信息(i18n)解析

    国际化信息理解 国际化信息也称为本地化信息 。 Java 通过 java.util.Locale 类来表示本地化对象,它通过 “语言类型” 和 &#8220…

    Java 2023年5月30日
    0127
  • Centos7: 查找软件安装位置

    rpm -qal |grep rabbitmq#查看rabbitmq所有安装包的文件存储位置 Original: https://www.cnblogs.com/CodeWater…

    Java 2023年6月7日
    082
  • 原来工作几年了,只用了数据校验的皮毛~

    不知不觉 Spring Boot专栏文章已经写到第十四章了,无论写的好与不好,作者都在尽力写的详细,写的与其它的文章不同,每一章都不是浅尝辄止。如果前面的文章没有看过的朋友,点击这…

    Java 2023年6月14日
    094
  • nginx目录及配置语法

    一、Nginx安装目录 1、查看安装目录。 采用yum的方式安装,其实都是安装的一个一个的 pm 包,故可采用如下命令查看 rpm -ql nginx 遵循了 rpm 包管理规范。…

    Java 2023年5月30日
    0103
  • ucore操作系统学习(六) ucore lab6线程调度器

    ucore在lab5中实现了较为完整的进程/线程机制,能够创建和管理位于内核态或用户态的多个线程,让不同的线程通过上下文切换并发的执行,最大化利用CPU硬件资源。ucore在lab…

    Java 2023年6月8日
    081
  • mybatis-plus多数据源切换失败

    支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 加密 ENC()。 支持每个数据库独立初始化表结构schema和数据库data…

    Java 2023年5月30日
    098
  • Java语言基础

    (一)Java编译运行过程 编译期:Java源文件经过编译生成.class字节码文件运行期:JVM加载.class并运行.class特点:跨平台,一次编译到处使用(跨平台特性如下图…

    Java 2023年6月5日
    0103
  • CentOS 6快捷安装RabbitMQ教程

    1.安装Erlang yum install erlang 2.安装RabbitMQ yum install rabbitmq-server 3.配置开机自启动 chkconfig…

    Java 2023年5月29日
    086
  • DECODE函数的奇怪用法的例子

    背景:你们公司超级注重企业文化,要求大家要做好孩子多读书,公司老板叫王富贵,老板娘叫张翠花,另有员工若干人。 需求:领导要求搞一个员工读书记录排名,展示出每个员工所读过的书都有啥?…

    Java 2023年6月8日
    0111
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球