使用Apache PDFBox将pdf文件转换为图片

一、引入依赖

		<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox-tools</artifactId><version>2.0.24</version></dependency>

二、每页进行转换

1、代码示例

package com.xiaobai.pdf2img;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.junit.jupiter.api.Test;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;/*** @Author 王天文* @Date 2025/1/2 21:51* @Description: pdf文件转图片*/
public class Pdf2ImgTest {@Testpublic void pdf2Img() {// pdf文件路径String pdfPath = "D:\\temp\\信息报送流程.pdf";// 图片目录String imgDir = "D:\\temp\\img\\";// 加载pdf文件try(PDDocument pdDocument = PDDocument.load(new File(pdfPath))) {PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);for (int i = 0; i < pdDocument.getNumberOfPages(); i++) {// 渲染图像BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(i, 500);File imageFile = new File(imgDir + "page-" + (i + 1) + ".png");// 保存为png格式ImageIO.write(bufferedImage, "PNG", imageFile);}} catch (IOException e) {e.printStackTrace();}}
}

2、说明

org.apache.pdfbox.rendering.PDFRenderer#renderImageWithDPI(int, float) 根据指定的DPI将pdf页面渲染成图像。DPI值越大,渲染越清晰,转换速度越慢。

三、pdf文件转换成长图

1、实现思路

根据pdf文件路径加载文件,对pdf文件的每页进行图像渲染,根据所有图像的高度计算长图片的高度,获取到所有图像的最大宽度即为长图片的宽度,使用java.awt.Graphics2D将所有图像渲染到长图片上。

2、代码示例

package com.xiaobai.pdf2img;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.junit.jupiter.api.Test;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;/*** @Author 王天文* @Date 2025/1/2 22:23* @Description: pdf文件转换成长图*/
public class Pdf2MergeImgTest {@Testpublic void pdf2Img() {// pdf文件路径String pdfPath = "D:\\temp\\信息报送流程.pdf";// 图片目录String imgPath = "D:\\temp\\img\\mergeImg.png";// 长图片高度int totalHeight = 0;// 长图片宽度int maxWidth = 0;// 加载pdf文件try(PDDocument document = PDDocument.load(new File(pdfPath))) {PDFRenderer pdfRenderer = new PDFRenderer(document);BufferedImage[] bufferedImages = new BufferedImage[document.getNumberOfPages()];// pdf文件的每页转换成BufferedImagefor (int i = 0; i < document.getNumberOfPages(); i++) {// 根据dpi渲染图片BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(i, 500);bufferedImages[i] = bufferedImage;// 高度totalHeight += bufferedImage.getHeight();// 宽度if (maxWidth < bufferedImage.getWidth()) {maxWidth = bufferedImage.getWidth();}}/*合并图片*/BufferedImage mergeImage = new BufferedImage(maxWidth, totalHeight, BufferedImage.TYPE_INT_RGB);Graphics2D g = mergeImage.createGraphics();int currentHeight = 0;for (BufferedImage bufferedImage : bufferedImages) {g.drawImage(bufferedImage, 0, currentHeight, null);currentHeight += bufferedImage.getHeight();}// 保存长图片ImageIO.write(mergeImage, "PNG", new File(imgPath));} catch (Exception e) {e.printStackTrace();}}
}

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

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

相关文章

C++11右值与列表初始化

1.列表初始化 C98传统的{} C98中一般数组和结构体可以用{}进行初始化。 struct Point {int _x;int _y; }; int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0; } C11中的{} C11以后统一初始化方式&#xff0c;想要实现一切对…

Unity Shader:从基础使用到动画实现全解析

在Unity的精彩世界里&#xff0c;Shader&#xff08;着色器&#xff09;堪称打造独特视觉效果的魔法棒。无论是绚丽的光影、奇幻的材质&#xff0c;还是生动的动画&#xff0c;Shader都能助你一臂之力。今天&#xff0c;就让我们一同深入探索Unity中Shader的使用方法&#xff0…

单片机复位电路基本理解教程文章·含上拉电阻理解电容开路理解!!!

目录 常见复位电路种类 复位电路电阻上拉理解 电容储能断路理解 ​​​​​​​ ​​​​​​​ 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路降压芯片驱动电路详解-…

2501d,d.110

原文 更改编译器 禁止使用-previewfixImmutableConv从const(void)[]复制到void[] 如果const(void)[]数据包含尾常指针,则复制到void[],随后可能会违反常数据: void f(int*[] a, const int*[] b) {void[] va a;const void[] vb b;va[] vb[]; //用常指针填充*a[0] 0; //更…

深入聊聊typescript、ES6和JavaScript的关系与前瞻技术发展

什么是typescript&#xff0c;为什么项目当中你可能没见过&#xff1f; TypeScript由微软发布于2012年&#xff0c;在发布之初并没有立即获得广泛的采用&#xff0c;但随着它的逐步发展和流行的框架&#xff08;如 Angular 和 React&#xff09;的支持&#xff0c;TypeScript …

Linux(Centos 7.6)网卡信息没有了问题处理

1.问题现象 虚拟机打开后&#xff0c;使用ifconfig查看IP信息&#xff0c;虚拟机默认的网卡名称是ens33&#xff0c;ifconfig没有看到相关问题&#xff0c;远程连接工具Xshell也不能正常访问该虚拟机。 [rootnode1 ~]# ifconfig lo: flags73<UP,LOOPBACK,RUNNING> mtu…

【大模型系列】Mobile-Agent(2024.04)

Paper: https://arxiv.org/pdf/2401.16158Github: https://github.com/X-PLUG/MobileAgentAuthor: Junyang Wang et al. 北交、阿里巴巴 Mobile-agent核心工作&#xff1a; 首先使用视觉感知工具(检测和OCR模型)识别前端界面中文本和图像元素的精确位置 检测图标&#xff1a;…

Android Studio学习笔记

01-课程前面的话 02-Android 发展历程 03-Android 开发机器配置要求 04-Android Studio与SDK下载安装 05-创建工程与创建模拟器

数据的简单处理——pandas模块——数据结构(Series和DataFrame对象)

pandas模块是基于Numpy模块开发的。在pandas模块中有两个重要的数据结构对象——Series和DataFrame。使用这两个对象可以在计算机的内存中构建虚拟的数据库。对于Series和DataFrame对象主要有三类&#xff0c;都是包括普通默认的方式、添加行列标签的方式、采用字典创建数据结构…

Linux 服务器启用 DNS 加密

DNS 加密的常用协议包括 DNS over HTTPS (DoH)、DNS over TLS (DoT) 和 DNSCrypt。以下是实现这些加密的步骤和工具建议&#xff1a; 1. 使用 DoH (DNS over HTTPS) 工具推荐&#xff1a; cloudflared&#xff08;Cloudflare 提供的客户端&#xff09;doh-client&#xff08;…

【three.js】材质(Material)

基础网格材质&#xff08;MeshBasicMaterial&#xff09;【常用】 一个以简单着色&#xff08;平面或线框&#xff09;方式来绘制几何体的材质&#xff0c;这种材质不受光照的影响。常用于背影、2D图形等场景。 参数&#xff1a; color&#xff1a;材质颜色。 opacity&#x…

【数据库系列】Spring Boot 中整合 MyBatis-Plus详细步骤

在 Spring Boot 中整合 MyBatis-Plus 可以按照以下步骤进行&#xff1a; 一、整合步骤 1. 创建 Spring Boot 项目 首先&#xff0c;使用 Spring Initializr&#xff08;https://start.spring.io/&#xff09;创建一个新的 Spring Boot 项目。在创建过程中&#xff0c;选择以…

naive ui 使用地址记录

naive ui 地址Naive UI Naive UI 是一个 Vue3 的组件库。 要了解如何安装&#xff0c;参见安装。 它比较完整&#xff0c;主题可调&#xff0c;用 TypeScript 写的&#xff0c;快

CVSS漏洞评分系统曝出严重缺陷

在网络安全领域&#xff0c;漏洞的管理和评估是企业防御的重要一环。然而&#xff0c;随着技术的快速发展和攻击手段的不断演变&#xff0c;传统的漏洞评分系统显露出了不可忽视的弊端。在近期的Black Hat欧洲大会上&#xff0c;摩根大通的网络安全专家警告称&#xff0c;通用漏…

深入剖析MySQL数据库架构:核心组件、存储引擎与优化策略(一)

sql语句分为两大类&#xff1a;查询&#xff08;select&#xff09;、增删改----修改&#xff08;update&#xff09; select语句的执行流程 执行sql语句的流程&#xff1a;连接数据库、缓存查询、解析器、优化器、执行器、存储引擎操作数据 客户端&#xff1a;图形界面工具…

电子病历四级视角下SQL语句的优化策略与实践用例研究

一、引言 1.1 研究背景与意义 在当今数智化医疗时代,电子病历(Electronic Medical Record,EMR)系统已成为医疗机构信息化建设的核心组成部分。电子病历不仅承载着患者的诊疗信息,更是医疗决策、质量控制、科研分析以及医疗管理的重要依据。根据国家卫生健康委发布的《电…

如何借助 AI 提升工作效率

AI让工作更高效 引言 你是否曾在忙碌的工作中感到力不从心&#xff0c;无法高效完成任务&#xff1f;在如今这个信息爆炸的时代&#xff0c;时间似乎总是不够用。而幸运的是&#xff0c;人工智能&#xff08;AI&#xff09;的崛起让这一切发生了变化。AI的应用正日益深入我们…

C++简明教程(14)动态库和静态库的内存共享机制

总结&#xff0c;动态库共享内存&#xff0c;静态库独占一份内存。

NextCloud服务安装与配置教程

NextCloud服务安装与配置教程 什么是 NextCloud: Nextcloud 是一款开源的私有云存储和协作平台,允许用户在自己的服务器上托管数据并管理团队协作。它可以作为一个功能丰富、安全可靠的替代方案,与商业云服务(如 Google Drive、Dropbox)相比提供更多控制和隐私保护。简单来…

Elasticsearch向量检索需要的数据集以及768维向量生成

Elasticsearch8.17.0在mac上的安装 Kibana8.17.0在mac上的安装 Elasticsearch检索方案之一&#xff1a;使用fromsize实现分页 快速掌握Elasticsearch检索之二&#xff1a;滚动查询(scrool)获取全量数据(golang) Elasticsearch检索之三&#xff1a;官方推荐方案search_after…