Word、PDF转换为图片Java

server/2024/10/25 13:31:26/

Word、PDF转换为图片Java

需求要在小程序端展示文档内容,所以将文档每页转换为图片后显示

参考和其他等方案:
https://blog.csdn.net/strggle_bin/article/details/140599514

https://www.modb.pro/db/566986

https://blog.csdn.net/spring_is_coming/article/details/136969669

Word转换为图片

<!-- word转图工具 -->
<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.8.0</version>
</dependency>
<dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-words</artifactId><version>23.1</version>
</dependency>
java">word">import com.aspose.words.Document;
word">import com.aspose.words.SaveFormat;
word">import lombok.extern.slf4j.Slf4j;word">import java.io.File;
word">import java.nio.file.Files;
word">import java.util.ArrayList;
word">import java.util.List;@Slf4j
word">public word">class WordToImageUtil {word">public word">static word">void main(String[] args) {wordToImage("C:\\Users\\Administrator\\Documents\\录入脚本\\324\\", "xxxx.doc");}word">public word">static List<String> wordToImage(String filePath, String fileName) {log.info("开始word转换为图片");List<String> resultList = word">new ArrayList<String>();// 获取文件路径分隔符String separator = File.separator;word">try {// 填充数据完毕的test.docx,在转换成图片File file1 = word">new File(filePath + separator + fileName); // 使用系统的路径分隔符// 打开生成的 Word 文件Document doc = word">new Document(Files.newInputStream(file1.toPath()));// 逐页将 Word 文件保存为图片(PNG格式)word">for (word">int i = 0; i < doc.getPageCount(); i++) {Document extractedPage = doc.extractPages(i, 1);// 拼接上文件名String path = filePath + separator + "tmpImg" + separator + removeFileExtension(fileName) + separator +"img" + System.currentTimeMillis() + "_" + i + ".png"; // 使用系统的路径分隔符// 创建目录(如果不存在的话)File tmpDir = word">new File(filePath + separator + "tmpImg" + separator + removeFileExtension(fileName));word">if (!tmpDir.exists()) {tmpDir.mkdirs(); // 创建目录}// 将 Word 文件保存为图片PNG格式extractedPage.save(path, SaveFormat.PNG);resultList.add(path);}} word">catch (Exception e) {e.printStackTrace();word">return word">new ArrayList<>();}log.info("结束word转换为图片");word">return resultList;}/*** 去掉后缀名* @param fileName* @return*/word">public word">static String removeFileExtension(String fileName) {word">int dotIndex = fileName.lastIndexOf(".");word">if (dotIndex == -1) {word">return fileName; // 如果没有找到点,则返回原始文件名}word">return fileName.substring(0, dotIndex); // 返回去掉后缀名的文件名}
}

PDF转换为图片

<!--PDF转换为图片-->
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version>
</dependency>
java">word">import org.apache.pdfbox.pdmodel.PDDocument;
word">import org.apache.pdfbox.rendering.PDFRenderer;
word">import javax.imageio.ImageIO;
word">import java.awt.image.BufferedImage;
word">import java.io.File;
word">import java.io.IOException;
word">public word">class PdfToImage {/*** 使用pdfbox将整个pdf转换成图片** @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test* @param filename    PDF文件名不带后缀名* @param type        图片类型 png 和jpg*/word">public word">static word">void pdf2png(String fileAddress, String filename, String type) {word">long startTime = System.currentTimeMillis();// 将文件地址和文件名拼接成路径 注意:线上环境不能使用\\拼接File file = word">new File(fileAddress + "\\" + filename + ".pdf");word">try {// 写入文件PDDocument doc = PDDocument.load(file);PDFRenderer renderer = word">new PDFRenderer(doc);word">int pageCount = doc.getNumberOfPages();word">for (word">int i = 0; i < pageCount; i++) {// dpi为144,越高越清晰,转换越慢BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI// 将图片写出到该路径下ImageIO.write(image, type, word">new File(fileAddress + "\\" + filename + "_" + (i + 1) + "." + type));}word">long endTime = System.currentTimeMillis();System.out.println("共耗时:" + ((endTime - startTime) / 1000.0) + "秒");  //转化用时} word">catch (IOException e) {e.printStackTrace();}}word">public word">static word">void main(String[] args) {pdf2png("C:\\Users\\Administrator\\Documents\\xxx\\pdf", "文件名", "png");}
}

乱码问题

如果在linux运行遇到中文乱码,可尝试安装字体然后重启程序运行

参考:https://blog.csdn.net/lljddddd/article/details/137958297

1、从本地找到字体:C:\Windows\Fonts

2、复制到Linux,我这里用的centos,复制字体到 /usr/share/fonts

3、安装fontconfig工具 yum -y install fontconfig

4、刷新字体缓存 fc-cache

5、查看字体列表是否完成安装 fc-list


http://www.ppmy.cn/server/134725.html

相关文章

【小白学机器学习16】 概率论的世界观2: 从正态分布去认识世界

目录 1 从正态分布说起 1.1 正态分布的定义 1.2 正态分布的名字 1.3 正态分布的广泛&#xff0c;和基础性 2 正态分布的公式和图形 2.1 正态分布 2.2 标准正态分布 3 正态分布的认识的3个层次 3.1 第1层次&#xff1a;个体的某个属性的样本值&#xff0c;服从正态分布…

django celery 定时任务 Crontab 计划格式

Celery 定时任务教程 Celery 是一个强大的异步任务队列/作业队列基于分布式消息传递的开源项目。它广泛用于处理各种类型的后台任务&#xff0c;例如发送电子邮件、处理图像、数据分析和视频转换等。 本文将介绍如何使用 Celery 实现定时任务&#xff0c;包括&#xff1a; 安…

Web前端高级工程师培训:使用 Node.js 构建一个 Web 服务端程序(1)

1-使用 Node.js 构建一个 Web 服务端程序 文章目录 1-使用 Node.js 构建一个 Web 服务端程序1、Node.js的安装与基础语法2、Node.js 中的 JavaScript 与 浏览器中的 JavaScript2-1、Node.js 中的 JavaScript2-2、浏览器 中的 JavaScript 3、什么是 WebServer(APP)&#xff1f;4…

【MySQL】提高篇—索引与性能优化:索引的概念与类型(单列索引、复合索引、全文索引)

在关系数据库中&#xff0c;当表中的数据量增大时&#xff0c;查询性能可能会显著下降。为了提高数据检索的效率&#xff0c;数据库系统提供了索引的概念。 索引类似于书籍的目录&#xff0c;可以快速定位到特定的数据行&#xff0c;从而加快查询速度。 索引的使用在实际应用…

开源数据库学习 - MYSQL - 开篇路线

最近对于数据库的知识有了点兴趣&#xff0c;公司里面由于项目大多是to B的项目所以基本采用oracle、db2、sqlserver这些有大企业支持的数据库&#xff0c;基本上遇见了问题都是有专门的技术服务公司提供技术支持&#xff08;要花钱&#xff09;。但是最近今年&#xff0c;随着…

vue3中ref和reactive的用法,区别和优缺点,以及使用场景

写在前头&#xff1a; reactive定义的数据只能修改里面的属性&#xff0c;不能将整个数据替换&#xff0c;实在要替换请使用 Object.assign(obj1, obj2);举个例子 这种写法无法直接改变obj1 let obj1 reactive({name: 猫,age: 2, });obj1 {name: 猪,age: 2, } 正确的写法…

ajax 读取文件

DOMException: Failed to read the responseXML property from XMLHttpRequest: The value is only accessible if the objects responseType is or document (was blob). at XMLHttpRequest.r ( $.ajax({ url: 未来之窗_服务, method: GET, …

java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…