java excel、word、PPT转换成pdf预览

先引入包:[lib下载地址](https://mp.csdn.net/mp_download/manage/download/UpDetailed)

在这里插入图片描述
在这里插入图片描述

Controllerpublic AjaxResult fileToPdf(@RequestBody VerifyCode url, HttpServletResponse response, HttpServletRequest request) throws IOException {String fileUrl = request.getScheme() + "://" + request.getServerName() + ":" + port + fileDir + url.getFileName().split("\\.")[0]+ ".pdf";String fileToPdfUrl = fileToPdf + url.getFileName().split("\\.")[0] + ".pdf";File newFile = new File(fileToPdfUrl);if(newFile.exists()){return AjaxResult.success(fileUrl);}File file = new File(fileToPdf);if(!file.exists()){file.mkdirs();}String suffix = url.getUrl().substring(url.getUrl().lastIndexOf("."));String type = FileTransForUtils.getResourceTypesDocument(suffix);if("word".equals(type)){return AjaxResult.success(FileTransForUtils.word3Pdf(url.getUrl(),response.getOutputStream(),fileToPdfUrl,fileUrl));}else if("excel".equals(type)){return AjaxResult.success(FileTransForUtils.excel3pdf(url.getUrl(), response.getOutputStream(),fileToPdfUrl,fileUrl));}else if("ppt".equals(type)){return AjaxResult.success(FileTransForUtils.ppt3pdf(url.getUrl(),response.getOutputStream(),fileToPdfUrl,fileUrl));}else {return AjaxResult.success(fileUrl);}}
package com.det.utils;import com.aspose.cells.Workbook;
import com.aspose.slides.Presentation;
import com.aspose.words.Document;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import com.det.common.utils.file.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;import java.io.*;
import java.nio.charset.StandardCharsets;
import java.rmi.ServerException;/*** @Author: lsx* @createDate: 2023/11/5 10:49* @description:*/
public class FileTransForUtils {private static final Logger logger = LoggerFactory.getLogger(FileTransForUtils.class);//word转PDFpublic synchronized static String word3Pdf(String wordPath, OutputStream outputStream,String fileName,String fileUrl) throws ServerException {if (!getLicense("word")) {          // 验证License 若不验证则转化出的pdf文档会有水印产生throw new ServerException("验证License失败。");}try {long old = System.currentTimeMillis();InputStream inputStreamFromUrl = FileUtils.getInputStreamFromUrl(wordPath);//Address是将要被转化的word文档Document doc = new Document(inputStreamFromUrl);//新建一个pdf文档File file = new File(fileName);FileOutputStream os = new FileOutputStream(file);//全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB,
//                doc.save(outputStream, SaveFormat.PDF);doc.save(os, SaveFormat.PDF);// XPS, SWF 相互转换long now = System.currentTimeMillis();os.close();outputStream.flush();outputStream.close();logger.info("word共耗时:" + ((now - old) / 1000.0) + "秒");  //转化用时} catch (Exception e) {logger.error(String.valueOf(e));e.printStackTrace();}return fileUrl;}//excel转PDFpublic synchronized static String excel3pdf(String excelPath, OutputStream outputStream,String fileName,String fileUrl) throws ServerException {if (!getLicense("excel")) { // 验证License 若不验证则转化出的pdf文档会有水印产生throw new ServerException("验证License失败。");}try {long old = System.currentTimeMillis();InputStream inputStreamFromUrl = FileUtils.getInputStreamFromUrl(excelPath);Workbook wb = new Workbook(inputStreamFromUrl);// 原始excel路径//新建一个pdf文档File file = new File(fileName);FileOutputStream os = new FileOutputStream(file);
//                wb.save(outputStream,com.aspose.cells.SaveFormat.PDF);wb.save(os,com.aspose.cells.SaveFormat.PDF);long now = System.currentTimeMillis();outputStream.flush();outputStream.close();os.close();logger.info("excel共耗时:" + ((now - old) / 1000.0) + "秒");  //转化用时} catch (Exception e) {logger.error(String.valueOf(e));e.printStackTrace();}return fileUrl;}//ppt转PDFpublic synchronized static String ppt3pdf(String pptPath, OutputStream outputStream,String fileName,String fileUrl) throws ServerException {// 验证Licenseif (!getLicense("ppt")) {throw new ServerException("验证License失败。");}FileOutputStream os = null;try {long old = System.currentTimeMillis();InputStream inputStreamFromUrl = FileUtils.getInputStreamFromUrl(pptPath);Presentation pres = new Presentation(inputStreamFromUrl);//输入ppt路径//IFontsManager fontsManager = pres.getFontsManager();//新建一个pdf文档File file = new File(fileName);os = new FileOutputStream(file);
//                pres.save(outputStream,com.aspose.slides.SaveFormat.Pdf);pres.save(os,com.aspose.slides.SaveFormat.Pdf);outputStream.flush();outputStream.close();long now = System.currentTimeMillis();logger.info("ppt共耗时:" + ((now - old) / 1000.0) + "秒");  //转化用时} catch (Exception e) {logger.error(String.valueOf(e));e.printStackTrace();}finally {try {os.close();} catch (IOException e) {e.printStackTrace();}}return fileUrl;}//剔除水印private static boolean getLicense(String type) {boolean result = false;try {// 凭证String license ="<License>\n" +"  <Data>\n" +"    <Products>\n" +"      <Product>Aspose.Total for Java</Product>\n" +"      <Product>Aspose.Words for Java</Product>\n" +"    </Products>\n" +"    <EditionType>Enterprise</EditionType>\n" +"    <SubscriptionExpiry>20991231</SubscriptionExpiry>\n" +"    <LicenseExpiry>20991231</LicenseExpiry>\n" +"    <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>\n" +"  </Data>\n" +"  <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>\n" +"</License>";InputStream is = new ByteArrayInputStream(license.getBytes(StandardCharsets.UTF_8));if(type.equals("word")){License asposeLic = new License();asposeLic.setLicense(is);}else if (type.equals("excel")){com.aspose.cells.License asposeLic = new com.aspose.cells.License();asposeLic.setLicense(is);}else if (type.equals("ppt")){com.aspose.slides.License aposeLic = new com.aspose.slides.License();aposeLic.setLicense(is);}result = true;} catch (Exception e) {logger.error(String.valueOf(e));e.printStackTrace();return false;}return result;}/*** 判断资源类型文档类*/public static String getResourceTypesDocument(String suffix) {String type = null;switch (suffix) {//文档类型case ".doc":case ".docx":case ".txt":type = "word";break;case ".xls":case ".xlsx":type = "excel";break;case ".ppt":case ".pptx":type = "ppt";break;}return type;}public static void main(String[] args) throws FileNotFoundException {String inputPath = "C:\\Users\\detong\\Desktop\\安全活动记录.docx";
//            String outputPath = "C:\\Users\\detong\\Desktop\\焊工作业教育培训2023.pdf";String suffix = inputPath.substring(inputPath.lastIndexOf("."));String type = getResourceTypesDocument(suffix);/*if("word".equals(type)){word3Pdf(inputPath,new FileOutputStream(new File("C:\\Users\\detong\\Desktop\\安全活动记录.word")));}else if("excel".equals(type)){excel3pdf(inputPath,new FileOutputStream(new File("C:\\Users\\detong\\Desktop\\安全活动记录.excel")));}else if("ppt".equals(type)){ppt3pdf(inputPath,new FileOutputStream(new File("C:\\Users\\detong\\Desktop\\安全活动记录.pdf")));}*/}
}

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

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

相关文章

迷雾系统-人物驱散迷雾

使用linerRender,将人物移动数据动态添加进去&#xff0c;同样是特殊层级让FogCamera渲染 EndCapVertices的数量越多&#xff0c;矩形就变为一个椭圆形的形状&#xff0c;更适合圆形视野探索 当拐点的两个点距离太近&#xff0c;LineRender会发生扭曲&#xff0c;解决方案是在…

【C++】类型转换 | IO流 | 空间配置器

C语言类型转换 C语言总共有两种形式的类型转换&#xff1a;隐式类型转换 和 显示类型转换。 C语言的转换格式虽然很简单&#xff0c;但也存在不少缺陷&#xff1a; 隐式类型转换有些情况下可能会引发意料之外的结果&#xff0c;比如数据精度丢失。显示类型转换的可视性比较差…

移植LVGL到单片机的一个demo简单介绍

简介 背景&#xff1a; 本文使用的是主控IC为stm32f103zet6, 显示IC为ST7735s&#xff0c;它是128*160的像素&#xff0c;色深为RGB565颜色。 官方虽然说LVGL移植平台只需 64kB 闪存和 8kB RAM 就足以满足简单的用户界面。但我移植到stm32f103c8t6&#xff0c;不管怎么修改配…

我干了8年测试,告诉你现在软件测试还能不能找到工作!

观点&#xff1a;如果你还是以前的思维来学习测试&#xff0c;那你肯定是找不到工作&#xff01; 我做测试工作有将近8年的时间&#xff0c;蚂蚁金服做过2年&#xff0c;因为加班太多离职了。目前在一家国企上市公司&#xff0c;一年能拿三四十个左右&#xff0c;对比头部互联…

可视化 | echarts饼图改编

echarts模板来源 &#x1f4da;改编点 &#x1f407;基本样式 去掉legend、label&#xff1a;show: false背景透明&#xff1a;backgroundColor: "transparent"去除功能标签添加载入动态animationEasing: elasticOut, animationDelay: function (idx) {return Mat…

【数据结构】顺序表 | 详细讲解

在计算机中主要有两种基本的存储结构用于存放线性表&#xff1a;顺序存储结构和链式存储结构。本篇文章介绍采用顺序存储的结构实现线性表的存储。 顺序存储定义 线性表的顺序存储结构&#xff0c;指的是一段地址连续的存储单元依次存储链性表的数据元素。 线性表的&#xf…

10-Docker-分布式存储算法

01-哈希取余算法分区 哈希取余分区&#xff08;Hash Modulus Partitioning&#xff09;是一种在分布式计算和数据存储中常用的分区策略&#xff0c;其目的是将数据或计算任务分配到多个节点或服务器上&#xff0c;以实现负载均衡和提高性能。这种分区策略的核心思想是使用哈希…

通过商品ID获取到京东商品详情页面数据,京东商品详情官方开放平台API接口,京东APP详情接口,可以拿到sku价格,销售价演示案例

淘宝SKU详情接口是指&#xff0c;获取指定商品的SKU的详细信息。SKU是指提供不同的商品参数组合的一个机制&#xff0c;通过不同的SKU来标识商品的不同组合形式&#xff0c;如颜色、尺寸等。SKU详情接口可以帮助开发者获取指定商品的SKU列表&#xff0c;以及每个SKU的属性、库存…

VirtualBox网络地址转换(NAT),宿主机无法访问虚拟机的问题

问题&#xff1a;NAT模式下&#xff0c;默认只能从内访问外面&#xff0c;而不能从外部访问里面&#xff0c;所以只能单向ping通&#xff0c;虚拟机的ip只是内部ip。 PS&#xff1a;桥接则是与主机公用网卡&#xff0c;有独立的外部ip。 解决&#xff1a;NAT模式可以通过配置 …

第十八章 Swing 程序设计

目录 概述 Swing常用窗体 JFrame 窗体 JDialog 对话框 JOptionPane 小型对话框 1.自定义对话框 2.确认框 3.输入框 4.通知框 常用布局管理器 null绝对布局 FlowLayout 流布局管理器 BorderLayout 边界布局管理器 GridLayout 网络布局管理器 常用面板 JPa…

Servlet作业小练习

一.题目 利用JavaBean实现用户类&#xff0c;包含姓名、性别、爱好&#xff0c;爱好需要用多选框 实现表单1进行获取数据&#xff0c;表单2显示获取结果。 利用Servlet实现逻辑代码 二.实现效果 三.具体实现 1.User实体类 package com.hjj.pojo.hw9;/*** author:嘉佳 Dat…

Halcon的相机内参外参的标定

halcon标定相机内参只能使用方向标定板和圆点标定板。并且方向标定板可也可用性极高。 1.打开halcon的标定助手&#xff0c;选择标定板的描述文件&#xff0c;填写标定板的厚度&#xff0c;根据相机选择像元的尺寸和镜头的焦距。如果已有相机内参&#xff0c;只标定外参&#…

设计模式(3)-结构型模式

结构型模式 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低&#xff0c;满足“合成复用原则…

计算机网络第4章-通用转发和SDN

引子&#xff1a; 在前面&#xff0c;我们将基于目的地转发的特征总结为两个步骤&#xff1a; 查找目的IP地址&#xff08;匹配&#xff09;&#xff0c;然后将分组发送到有特定输出端口的交换结构&#xff08;“动作”&#xff09;。 但是这种转发特征会带来许多问题&#…

webpack babel

构建工具 简介 当我们习惯了在node中编写代码的方式后&#xff0c;在回到前端编写html、css、js这些东西会感觉到各种的不便。比如&#xff1a;不能放心的使用模块化规范&#xff08;浏览器兼容性问题&#xff09;、即使可以使用模块化规范也会面临模块过多时的加载问题。我们…

【Excel】函数sumif范围中符合指定条件的值求和

SUMIF函数是Excel常用函数。使用 SUMIF 函数可以对报表范围中符合指定条件的值求和。 Excel中sumif函数的用法是根据指定条件对若干单元格、区域或引用求和。 sumif函数语法是&#xff1a;SUMIF(range&#xff0c;criteria&#xff0c;sum_range) sumif函数的参数如下&#xff…

多测师肖sir___接口自动化测试框架(python+request+unittest+ddt)

接口自动化测试框架 一、接口自动化测试框架&#xff08;pythonrequestunittestddt&#xff09; 首先我们新建一个新项目:名称zdh 二、在一个项目中&#xff1a;新建6个包 第一个包conf包用来填写配置参数、地址等 第二个包data 包用来存放测试用例的表格 第三个包report 包用来…

vscode 终端进程启动失败: shell 可执行文件“C:\Windows\System32\WindowsPower

vscode 终端进程启动失败: shell 可执行文件“C:\Windows\System32\WindowsPower 第一次用vscode&#xff0c;然后遇到这个问题&#xff0c;在设置里搜索 terminal.integrated.defaultProfile.windows 将这里的null改成"Command Prompt" 重启就可以了

Spring Cloud学习(五)【Feign 远程调用】

文章目录 RestTemplate方式调用存在的问题Feign的介绍定义和使用Feign客户端Feign 的自定义配置Feign 性能优化Feign 的最佳实践 RestTemplate方式调用存在的问题 先来看我们以前利用RestTemplate发起远程调用的代码&#xff1a; 存在下面的问题&#xff1a; 代码可读性差&am…

jmeter接口自动化部署jenkins教程

首先&#xff0c;保证本地安装并部署了jenkins&#xff0c;jmeter&#xff0c;xslproc 我搭建的自动化测试框架是jmeterjenkinsxslproc ---注意&#xff1a;原理是&#xff0c;jmeter自生成的报告jtl文件&#xff0c;通过xslproc工具&#xff0c;再结合jmeter自带的模板修改&…