Java【代码 16】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理

word、excel、pdf、image转换工具类

  • 1.感谢
  • 2.包含的工具类
  • 3.lib文件说明
    • 3.1 使用的
    • 3.2 未使用的
  • 4.核心代码
    • 4.1 WordToPdfUtil
    • 4.2 ExcelToPdfUtil
    • 4.3 PdfToImageUtil
  • 6.问题处理
    • 6.1 Word中文无法转换
    • 6.2 Excel中文无法转换
  • 7.总结

1.感谢

感谢小伙伴儿的分享:
● 不羁
● 郭中天
整合调整后的工具类Gitee地址:https://gitee.com/yuanzhengme/java_application_aspose_demo

2.包含的工具类

● WordToPdfUtil用于将word文档转换为pdf格式的工具类
● ExcelToPdfUtil用于将excel文档转换为pdf格式的工具类
● PdfToImageUtil用于将pdf文档转换为image格式的工具类

3.lib文件说明

3.1 使用的

● aspose-words-15.8.0-jdk16.jar 将word文档转换为pdf需要引入
● aspose-cells-8.5.2.jar 将excel文档转换为pdf需要引入
● aspose-cells-20.7.jar 将excel文档转换为pdf需要引入(Linux端中文出现乱码时使用)

3.2 未使用的

● aspose-words-15.12.0-jdk16.jar 未测试
● aspose-pdf-22.4.cracked.jar 将pdf转换为其他格式【破解版效果不佳】
● aspose-pdf-22.4.jar 将pdf转换为其他格式【未破解效果依然不佳】

4.核心代码

4.1 WordToPdfUtil

    /*** word 转 pdf** @param wordFilePath word文件路径* @param pdfFilePath  pdf文件路径*/public static void convert(String wordFilePath, String pdfFilePath) {FileOutputStream fileOutputStream = null;try {pdfFilePath = pdfFilePath == null ? getPdfFilePath(wordFilePath) : pdfFilePath;setLicense();File file = new File(pdfFilePath);fileOutputStream = new FileOutputStream(file);Document doc = new Document(wordFilePath);doc.save(fileOutputStream, SaveFormat.PDF);} catch (Exception e) {e.printStackTrace();} finally {try {assert fileOutputStream != null;fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}

4.2 ExcelToPdfUtil

    /*** excel 转 pdf** @param excelFilePath excel文件路径* @param pdfFilePath   pdf文件路径* @param convertSheets 需要转换的sheet*/public static void convert(String excelFilePath, String pdfFilePath, int[] convertSheets) {FileOutputStream fileOutputStream = null;try {pdfFilePath = pdfFilePath == null ? getPdfFilePath(excelFilePath) : pdfFilePath;// 设置LicensesetLicense();// 读取excel文件Workbook wb = new Workbook(excelFilePath);fileOutputStream = new FileOutputStream(pdfFilePath);// 设置pdf格式PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();pdfSaveOptions.setOnePagePerSheet(true);if (null != convertSheets) {printSheetPage(wb, convertSheets);}wb.save(fileOutputStream, pdfSaveOptions);fileOutputStream.flush();} catch (Exception e) {e.printStackTrace();} finally {try {assert fileOutputStream != null;fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}

4.3 PdfToImageUtil

    /*** 根据参数将全部的PDF转换为Image** @param pdfFilePath   PDF文件路径* @param imageFileDir  图片存储目录* @param imageFileName 图片存储文件没* @param type          图片类型*/public static void convertAllPage(String pdfFilePath, String imageFileDir, String imageFileName, String type) {System.setProperty("sun.java2d.cmm", "sun.java2d.cmm.kcms.KcmsServiceProvider");// 图片类型if (type == null || "".equals(type)) {type = IMAGE_TYPE_JPG;}// 1.加载PDF文件File file = new File(pdfFilePath);// 2.生成JPG图片的文件夹imageFileDir = imageFileDir == null ? getImageFileDir(pdfFilePath) : imageFileDir;imageFileName = imageFileName == null ? getImageFileName(pdfFilePath) : imageFileName;try {PDDocument pdDocument = PDDocument.load(file);PDFRenderer renderer = new PDFRenderer(pdDocument);int pageCount = pdDocument.getNumberOfPages();for (int i = 0; i < pageCount; i++) {BufferedImage image = renderer.renderImageWithDPI(i, 144);ImageIO.write(image, type,new File(imageFileDir.concat(File.separator).concat(imageFileName).concat("_").concat(String.valueOf(i + 1)).concat(".").concat(type)));}} catch (IOException e) {e.printStackTrace();}}

6.问题处理

  • 都需要将字体文件simsun.ttc上传到jarPath/font目录下。

6.1 Word中文无法转换

在Linux环境下,如果转换后的pdf文件无中文,在WordToPdfUtil转换方法里添加以下代码:

// 设置字体
String realPath = new ApplicationHome(WordToPdfUtil.class).getSource().getParentFile().toString();
FontSettings.setFontsFolder(realPath + File.separatorChar + "font", false);

6.2 Excel中文无法转换

使用aspose-cells-20.7.jar:

<dependency><groupId>com.aspose.cells</groupId><artifactId>aspose-cells</artifactId><version>20.7</version><scope>system</scope><systemPath>${project.basedir}/lib/aspose-cells-20.7.jar</systemPath>
</dependency>

并在ExcelToPdfUtil转换方法里添加以下代码:

// 设置字体
String realPath = new ApplicationHome(WordToPdfUtil.class).getSource().getParentFile().toString();
String fontDir = realPath + File.separatorChar + "font";
IndividualFontConfigs individualFontConfigs = new IndividualFontConfigs();
individualFontConfigs.setFontFolder(fontDir, false);
LoadOptions loadOptions = new LoadOptions();
loadOptions.setFontConfigs(individualFontConfigs);
// 读取excel文件
Workbook wb = new Workbook(excelFilePath, loadOptions);

7.总结

  • PDF转换为其他格式的方法效果不佳,遇到好的方案会进行补充。
  • 主要用到aspose的jar包,实际上是需要授权的,否则会有水印,是个隐患。

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

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

相关文章

使用vs2022将.net8的应用程序发布为一个单独文件

在使用.NetCore3.1时&#xff0c;可以通过设置以下工程配置文本来将项目发布为一个单独的应用程序文件&#xff1a; <Project Sdk"Microsoft.NET.Sdk.WindowsDesktop"><PropertyGroup><TargetFramework>netcoreapp3.1</TargetFramework><…

permanent property翻译为永久产权属于错误,应该是正式产权、法定产权

很多人说美国房子是永久产权。再配上“风能进&#xff0c;雨能进&#xff0c;国王不能进”&#xff0c;于是给人一种误解&#xff0c;就是永远所有。现实性是什么呢&#xff1f;你今天不交房产税、物业费&#xff0c;明天就被拍卖。这就是所谓的永久产权&#xff1f;显然不是。…

MySQL新类型JSON的用法讲解

前言 MySQL相信大家应该不陌生吧&#xff0c;都知道MySQL有很多数据类型&#xff0c;包括int&#xff0c;char&#xff0c;verchar&#xff0c;这些也是平时建表使用比较多的类型&#xff0c;在MySQL 8引入了新的数据类型——JSON&#xff0c;它使得在数据库中存储和查询 JSON…

QT容器分类与QSet应用

一.QT容器分类 Qt提供了多种容器类&#xff0c;大致可以分为以下几类&#xff1a; 1.顺序容器&#xff1a;这类容器按照线性顺序&#xff08;如列表或数组&#xff09;存储元素。例如&#xff0c;QList, QLinkedList, QVector, QStack, 和 QQueue。 2.关联容器&#xff1a;这…

LLM应用开发与落地:基于上下文的文本信息检测与提取

最近一直用LLM解决各种各样的问题&#xff0c;感觉已经脱离不了LLM了。每次使用LLM解决一个之前解决不了的问题&#xff0c;或者大大提升我的工作效率的时候&#xff0c;我内心都小小会激动一下。我想这是只通过看文章或只是研究AI理论感受不到的小确幸。我也因此更加确信LLM是…

react-jss书写样式

目录 react-jss的使用 react-jss的使用 实现组件化样式、动态样式、避免样式冲突 npm install react-jss yarn add react-jss// 使用 import React from react; import { createUseStyles } from react-jss;const useStyles createUseStyles({myButton: {color: green,margi…

Kotlin MultiPlatform:构建跨平台应用的未来

Kotlin MultiPlatform&#xff1a;构建跨平台应用的未来 1 引言 1.1 Kotlin MultiPlatform简介 Kotlin MultiPlatform&#xff08;简称KMP&#xff09;是一种由JetBrains开发的跨平台开发解决方案&#xff0c;它建立在Kotlin语言之上。KMP允许开发者使用一套Kotlin代码来构建…

【2024】Docker部署Redis

1.说明&#xff1a; 因为容器实例的运行是有生命周期的&#xff0c;一些redis的备份、日志和配置文件什么的最好还是放在服务器本地。这样当容器删除时&#xff0c;我们也可以保留备份和日志文件。所以先在本地服务器安装redis并配置文件设置。下面是安装步骤: 2.安装步骤 1…

Jmeter性能测试: 基于JDK 21 安装 Jmeter 5.6.3

目录 一、实验 1.环境 2.JDK下载 3.Jmeter下载 4.Windows安装JDK 21 5.Windows安装Jmeter 5.6.3 6.Linux安装JDK 21 7.Linux安装Jmeter 5.6.3 二、问题 1. Linux 的profile、bashrc、bash_profile文件有哪些区别 一、实验 1.环境 &#xff08;1&#xff09;主机 表…

Android源码设计模式解析与实战第2版笔记(二)

第二章 应用最广的模式 — 单例模式 单例模式的定义 确保某一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这个实例。 单例模式的使用场景 确保某个类有且只有一个对象的场景&#xff0c;避免产生多个对象消耗过多的资源&#xff0c;或者某种类型的对象只应…

压电式、电磁式蜂鸣器设计电路

蜂鸣器常用分类从两方面 声源类型&#xff1a;压电蜂鸣器( Piezoceramic Element Buzzers )、电磁蜂鸣器( Magnetic Buzzers ) 驱动类型&#xff1a;有源蜂鸣器( Indicators )、无源蜂鸣器( Transducers ) 一、电磁式蜂鸣器 无源电磁式设计电路 电磁蜂鸣器的线圈类似于电感&am…

“文心一言”揭秘:智能语言模型的新里程碑

前文 在数字化、信息化的浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;技术如同一匹黑马&#xff0c;不断刷新着我们对科技发展的认知。其中&#xff0c;智能语言模型作为AI领域的一大分支&#xff0c;更是引领着自然语言处理&#xff08;NLP&#xff09;技术的革新。…

web前端项目-动画特效【附源码】

文章目录 一&#xff1a;赛车游戏动画HTML源码&#xff1a;JS源码&#xff1a;CSS源码&#xff1a;&#xff08;1&#xff09;normalize.css&#xff08;2&#xff09;style.css 二&#xff1a;吉普车动画演示HTML源码&#xff1a;CSS源码&#xff1a;&#xff08;1&#xff09…

ARM Cortex-A 内核的运行模式切换

ARM Cortex-A 内核的运行模式切换 ARM Cortex-A系列内核的处理器支持多种运行模式的切换。 不同的运行模式能满足不同的需求,如响应中断、运行操作系统内核、处理异常等。 目录 1 ARM Cortex-A 内核的处理器什么场景下有切换运行模式的需求 2 ARM Cortex-A 内核的处理…

【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现

系列文章目录 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part2 自有数据集构建 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用 本篇文章是对已有一篇文章的整理归纳&#xff0c;并对文章中…

HybridA* 论文解读

本文旨在对原论文进行翻译&#xff0c;对混合A*有一个大概的理解 论文题目&#xff1a;Practical Search Techniques in Path Planning for Autonomous Driving 1 摘要 本文描述了一个实用的路径规划算法&#xff0c;无人驾驶汽车在未知的环境中&#xff0c;障碍物通过机器人…

计算机毕业设计 | SSM 凌云招聘平台(附源码)

1&#xff0c;绪论 人力资源是企业产生效益、创造利润的必不可少的、最重要的资源。人作为人力资源的个体可看作是一个承载着有效知识、能力的信息单元。这样的信息单元可看作是一个为企业产生价值和利润的个体。从而使得这样的信息单元所具有的信息就是一个有价值的信息。 校…

UnityUI看向相机

注释 在项目中经常会用到名字始终看向相机&#xff0c;可以挂上如下代码 using UnityEngine;public class LookAtCamera : MonoBehaviour {public Camera _camera;public void Start(){_camera Camera.main;}void Update(){//transform.LookAt(transform.position _camera.…

Windows版本Node.js常见问题及操作解决方式(小白入门必备)

npm i时ERROR:reason: certificate has expired问题 https://blog.csdn.net/m0_73360677/article/details/135774500 # 1.取消ssl验证&#xff1b;npm config set strict-ssl false#这个方法一般可以直接解决问题&#xff0c;如不能请尝试第二种方法# 2.更换npm镜像源&#x…

day34WEB 攻防-通用漏洞文件上传黑白盒审计逻辑中间件外部引用

目录 一&#xff0c;白盒审计-Finecms-代码常规-处理逻辑 黑盒思路&#xff1a;寻找上传点抓包修改突破获取状态码及地址 审计流程&#xff1a;功能点-代码文件-代码块-抓包调试-验证测试 二&#xff0c;白盒审计-CuppaCms-中间件-.htaccess 三&#xff0c;白盒审计-Metin…