PDF转化为图片

Java 类 PDF2Image 在包 com.oncloudsoft.zbznhc.common.util.pdf 中是用来将 PDF 文件转换为图像的。它使用了 Apache PDFBox 库来处理 PDF 文档并生成图像。下面是类中每个部分的详细解释:

类和方法说明

  • PDF2Image:

    • 使用了 Lombok 库的 @Slf4j 注解,这会为类自动生成一个日志记录器(logger),可以用来记录信息、错误等。
    • 提供了两个重载的 pdf2Image 方法,用于处理 PDF 到图像的转换。
  • 方法 pdf2Image(String file, String targetFolder):

    • 接受 PDF 文件的路径和目标文件夹路径作为参数。
    • 打印日志信息。
    • 调用另一个重载的 pdf2Image 方法来执行转换。
  • 方法 pdf2Image(File file, String targetFolder):

    • 接受 File 对象和目标文件夹路径作为参数。
    • 使用 PDDocument.load 加载 PDF 文件,并设置内存使用设置为仅使用临时文件。
    • 获取 PDF 文档的总页数。
    • 使用 PDFRenderer 类来渲染 PDF 页面为图像。
    • 逐页渲染 PDF,并将渲染后的图像保存为 JPG 格式的文件。
    • 图像的文件名基于原始 PDF 文件名,并附加页码和 .jpg 后缀。
    • 处理完所有页面后,返回包含生成的图像文件路径的列表。
  • 异常处理:

    • 捕获并记录 InvalidPasswordExceptionIOException 异常。
  • 主方法 main(String[] args):

    • 用于测试 pdf2Image 方法。
    • 记录并打印转换过程所需的时间。

功能

该类主要用于将 PDF 文件转换为一系列的 JPG 图像,每页一个图像。这在需要将 PDF 文档的内容以图像形式展示或处理时非常有用,如在网页上显示 PDF 页面的预览图。

使用 Apache PDFBox

Apache PDFBox 是一个开源的 Java 工具,用于处理 PDF 文档。这个类利用 PDFBox 提供的功能来渲染和保存 PDF 页面作为图像。

注意事项

  • 需要确保 Apache PDFBox 库已被添加到项目依赖中。
  • 方法中使用了硬编码的 DPI(每英寸点数)和 JPG 图像质量设置,这可能需要根据实际需求进行调整。
  • 生成的 JPG 文件将保存在指定的目标文件夹中。
package com.oncloudsoft.zbznhc.common.util.pdf;import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.io.MemoryUsageSetting;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.tools.imageio.ImageIOUtil;import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;@Slf4j
public class PDF2Image {private static final int PAGE_SIZE = 50;/*** 提取* @param file			PDF文件* @param targetFolder 	图片存放目录* @return */public static ArrayList<String> pdf2Image(String file, String targetFolder) {log.info("PDF2Image中,file为:"+file);return pdf2Image(new File(file), targetFolder);}/*** 由于apache-pdfbox版本升级到2.0.18, 部分api不兼容,覆盖旧版本pdf2Image方法* @param file pdf文件* @param targetFolder  图片保存文件夹路径*/public static ArrayList<String> pdf2Image(File file, String targetFolder) {ArrayList<String> list = new ArrayList<>();String prex = file.getName().split("\\.")[0];try (PDDocument document = PDDocument.load(file, MemoryUsageSetting.setupTempFileOnly());) {int pages = document.getNumberOfPages();PDFRenderer renderer = new PDFRenderer(document);int k = 0;int count = 1;List<BufferedImage> imageList = new ArrayList<>(PAGE_SIZE);for (;;) {int startPage = k * PAGE_SIZE;int endPage = startPage + PAGE_SIZE > pages ? pages : startPage + PAGE_SIZE;k++;imageList.clear();for (int i = startPage; i < endPage; i++) {BufferedImage image = renderer.renderImageWithDPI(i, 150);//					imageList.add(image);String imgPath = targetFolder + File.separator + prex + "_" + (count++) + ".jpg";ImageIOUtil.writeImage(image, imgPath, 200);list.add(imgPath);}if (endPage == pages) break;}return list;} catch (InvalidPasswordException e) {log.error("", e);} catch (IOException e) {log.error("", e);}return list;}public static void main(String[] args) throws IOException {long s = System.currentTimeMillis();String file = "/home/sunyuhua/test/1+2.pdf";String folder = "/home/sunyuhua/test/jpg";pdf2Image(file, folder);System.out.println("耗时: " + (System.currentTimeMillis() - s));}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/143780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hivesql连续日期统计最大逾期/未逾期案例

1、虚表(测试表和数据) create test_table as select a.cust_no, a.r_date, a.yqts from ( select 123 as cust_no, 20231101 as r_date, 0 as yqts union all select 123 as cust_no, 20231102 as r_date, 1 as yqts union all select 123 as cust_no, 20231103 as r_d…

PPT转PDF转换器:便捷的批量PPT转PDF转换软件

在数字化时代&#xff0c;文档转换已成为日常工作不可或缺的一环。特别是对于那些需要转发或发布演示文稿的人来说&#xff0c;如果希望共享给他人的PPT文件在演示过程中不被修改&#xff0c;那么将PPT文件转换为PDF格式已经成为一个常见的选择。大多数PDF阅读器程序都支持全屏…

Rust实战教程:构建您的第一个应用

大家好&#xff01;我是lincyang。 今天&#xff0c;我们将一起动手实践&#xff0c;通过构建一个简单的Rust应用来深入理解这门语言。 我们的项目是一个命令行文本文件分析器&#xff0c;它不仅能读取和显示文件内容&#xff0c;还会提供一些基础的文本分析&#xff0c;如计算…

pandas教程:GroupBy Mechanics 分组机制

文章目录 Chapter 10 Data Aggregation and Group Operations&#xff08;数据汇总和组操作&#xff09;10.1 GroupBy Mechanics&#xff08;分组机制&#xff09;1 Iterating Over Groups&#xff08;对组进行迭代&#xff09;2 Selecting a Column or Subset of Columns (选中…

小程序中如何设置门店信息

小程序是商家转型升级的利器&#xff0c;小程序中门店信息的准确性和完整性对于用户的体验和信任度都有很大的影响。下面具体介绍门店信息怎么在小程序中进行设置。 在小程序管理员后台->门店设置处&#xff0c;可以门店设置相关。主要分为2个模块&#xff0c;一个是门店级…

Linux-CentOS重要模块

软件包管理器&#xff1a;CentOS使用Yum&#xff08;Yellowdog Updater, Modified&#xff09;作为其包管理器。Yum提供了一种方便的方式来安装、更新和删除软件包&#xff0c;并自动解决依赖关系。 RPM&#xff1a;RPM&#xff08;RPM Package Manager&#xff09;是CentOS中…

CocosCreator3.8神秘面纱 CocosCreator 项目结构说明及编辑器的简单使用

我们通过Dashboard 创建一个2d项目&#xff0c;来演示CocosCreator 的项目结构。 等待创建完成后&#xff0c;会得到以下项目工程&#xff1a; 一、assets文件夹 assets文件夹&#xff1a;为资源目录&#xff0c;用来存储所有的本地资源&#xff0c;如各种图片&#xff0c;脚本…

posix定时器的使用

POSIX定时器是基于POSIX标准定义的一组函数&#xff0c;用于实现在Linux系统中创建和管理定时器。POSIX定时器提供了一种相对较高的精度&#xff0c;可用于实现毫秒级别的定时功能。 POSIX定时器的主要函数包括&#xff1a; timer_create()&#xff1a;用于创建一个定时器对象…

C++网络编程库编写自动爬虫程序

首先&#xff0c;我们需要使用 C 的网络编程库来编写这个爬虫程序。以下是一个简单的示例&#xff1a; #include <iostream> #include <string> #include <curl/curl.h> #include <openssl/ssl.h>const char* proxy_host "duoip"; const in…

LuatOS-SOC接口文档(air780E)--pack - 打包和解包格式串

pack.unpack( string, format, init) 解包字符串 参数 传入值类型 解释 string 需解包的字符串 string 格式化符号 ‘<’:设为小端编码 ‘>’:设为大端编码 ‘’:大小端遵循本地设置 ‘z’:空字符串 ‘p’:byte字符串 ‘P’:word字符串 ‘a’:size_t字符串 ‘A’:…

springmvc中针对一个controller方法配置两个url请求

记录一个小知识点。 某些应用场景》。。你可能需要不同的url请求得到相同的结果&#xff0c;那么你写两个方法总是不太好的&#xff0c;使用下面的方法可以解决这个问题。 RequestMapping(value { "/item/index.htm", "/product/index.htm" })public Mod…

k8s yaml文件含义

文章目录 1、YAML的文件格式和注意事项2、YAML各个字段含义 1、YAML的文件格式和注意事项 不支持制表符tab键缩进&#xff0c;需要使用空格缩进&#xff0c;使用缩进表示层级关系通常开头缩进2个空格&#xff0c;缩进的空格数不重要&#xff0c;只要相同层级的元素左对齐即可字…

【Python】基础(学习笔记)

一、Python介绍 1、Python优点 学习成本低 开源 适应⼈群⼴泛 应⽤领域⼴泛 2、Python解释器 Python解释器作用&#xff1a;运行Python文件 Python解释器分类 CPython&#xff1a;C语⾔开发的解释器[官⽅]&#xff0c;应⽤⼴泛的解释器。 IPython&#xff1a;基于CPyth…

为RabbitMQ配置SSL

1. 安装 OpenSSL 从 OpenSSL 的官方网站&#xff08;https://www.openssl.org/&#xff09;下载 OpenSSL 工具的 Windows 版本&#xff0c;并安装。 2. 创建 SSL 证书和私钥 执行以下命令以生成私钥文件&#xff08;.key&#xff09;和证书签名请求文件&#xff08;.csr&…

Spring中有哪几种方法获取HttpSession对象

Spring MVC 可以直接作为Controller的参数传入&#xff1a; RequestMapping(value "/test", method RequestMethod.POST, produces "application/json;charsetUTF-8")ResponseBodypublic Map test(HttpSession session, String otherParam) {//TODOre…

线性代数理解笔记

一.向量引入: 向量&#xff1a;只由大小和方向决定&#xff0c;不由位置决定。 二.向量加减法 向量的加法是首尾相连&#xff0c;减法是尾尾相连。 而向量v向量w为平行四边形主对角线。 向量v-向量w为平行四边形副对角线。 2.向量内积点乘&#xff08;内积&#xff09; 内积…

Java --- JVM之StringTable

目录 一、String的基本特性 二、String的内存分配 2.1、String内存分布图 三、字符串拼接操作 3.1、字符串拼接操作底层原理 3.2、拼接操作与append操作效率对比 四、intern()方法 4.1、intern()效率 五、StringTable的垃圾回收 一、String的基本特性 1、String字符…

MR外包团队:MR、XR混合现实技术应用于游戏、培训,心理咨询、教育成为一种创新的各行业MR、XR形式!

随着VR、AR、XR、MR混合现实等技术逐渐应用于游戏开发、心理咨询、培训、教育各个领域&#xff0c;为教育、培训、心理咨询等行业带来了全新的可能性。MR、XR游戏开发、心理咨询是利用虚拟现实技术模拟真实场景&#xff0c;让学生身临其境地参与学习和体验&#xff0c;从而提高…

为什么UI自动化难做?—— 关于Selenium UI自动化的思考

在快速迭代的产品、团队中&#xff0c;UI自动化通常是一件看似美好&#xff0c;实际“鸡肋”&#xff08;甚至绝大部分连鸡肋都算不上&#xff09;的工具。原因不外乎以下几点&#xff1a; 1 效果有限 通常只是听说过&#xff0c;就想去搞UI自动化的团队&#xff0c;心里都认…

SpringSecurity6从入门到上天系列第六篇:解决这个问题为什么在引入SpringSecurity之后所有的请求都需要先做登录认证才可以进行访问呢

文章目录 问题引入 1&#xff1a;问题阐述 2&#xff1a;问题分析 一&#xff1a;从SpringBoot的自动装配 1&#xff1a;SpringBootApplication介绍 2&#xff1a;自动装配的核心方法 3&#xff1a;核心方法的调用路径 4&#xff1a;SpringSecurity核心配置 5&#xf…