在springboot项目中执行linux shell命令实现office转pdf 在线预览

文章目录

            • 1. 格式转换
            • 2. 在线预览

1. 格式转换
package com.gblfy.office.utils;import org.apache.commons.io.IOUtils;import javax.servlet.http.HttpServletResponse;
import java.io.*;/*** @@author gblfy* @Date : 2022-11-05  11:20* @describe: 文档在线预览* <p>* 服务器环境:Linux环境* 现支持文档类型: Excel  word  ppt pdf*/
public class ExecuteLinuxShellUtil {private static ExecuteLinuxShellUtil linuxPageDIsplsyFileUtil;public static synchronized ExecuteLinuxShellUtil getSwitchUtil() {if (linuxPageDIsplsyFileUtil == null) {linuxPageDIsplsyFileUtil = new ExecuteLinuxShellUtil();}return linuxPageDIsplsyFileUtil;}/*** 文档在线预览** @param response* @param fileStoragePath  文件存储路径 (前段获取文件存储路径返给后台)* @param beforeConversion 文件名(必须带文件后缀名,这里指的就是文件全名称)* @throws Exception*/public void conversionFile(HttpServletResponse response, String fileStoragePath, String beforeConversion) throws Exception {//文件存储路径//fileStoragePath ="/app/";//转换前的文件名//beforeConversion ="20191009133209lis_chgrpt.docx";String fileNamePath = fileStoragePath + beforeConversion;File file = new File(fileNamePath);if (!file.exists()) {System.err.println("库存中没有指定文件。。。。");return;}//获取到文件名String interceptFileName = beforeConversion.substring(0, beforeConversion.lastIndexOf("."));//截取文件后缀名String fileNameSuffix = beforeConversion.substring(beforeConversion.lastIndexOf(".") + 1);String command = null;if ("pdf".equals(fileNameSuffix)) {/*** 在线预览方法*/PdfPreviewUtil.openPdf(response, fileStoragePath + interceptFileName + ".pdf");} else if ("doc".equals(fileNameSuffix) || "docx".equals(fileNameSuffix)|| "xls".equals(fileNameSuffix) || "xlsx".equals(fileNameSuffix)|| "ppt".equals(fileNameSuffix) || "pptx".equals(fileNameSuffix)) {//文件格式转换命令 unoconv插件实现command = "/opt/libreoffice6.3/program/soffice  --headless --invisible --convert-to pdf " + fileNamePath;//格式转换+在线预览formatConverAndPreview(command, response, fileStoragePath, interceptFileName);} else {System.err.println("暂不支持该类型文件在线预览!!!");return;}}/*** 格式转换+在线预览 方法** @param command           文件格式转换命令         例:/usr/bin/unoconv -f pdf  /app/1.pptx* @param response          http响应网页,实现在线预览* @param fileStoragePath   准备文件存放路径         例:/app/* @param interceptFileName 文件名                  例: 1.pptx* @throws Exception*/public void formatConverAndPreview(String command,HttpServletResponse response,String fileStoragePath,String interceptFileName) throws Exception {/*** 执行shell命令,格式转换方法*///String temp ="/usr/bin/unoconv -f pdf " + command;executeCommand(command);/*** 在线预览方法*/PdfPreviewUtil.openPdf(response, fileStoragePath + interceptFileName + ".pdf");}/*** 执行shell命令* <p>* 統一把文件格式转换成pdf文件** @param command 文件格式转换命令*                例1:/usr/bin/unoconv -f pdf  /app/1.pptx*                例2:/opt/libreoffice6.3/program/soffice  --headless --invisible --convert-to pdf   /app/1.pptx*/private static void executeCommand(String command) {StringBuffer output = new StringBuffer();Process process;InputStreamReader inputStreamReader = null;BufferedReader reader = null;try {process = Runtime.getRuntime().exec(command);process.waitFor();inputStreamReader = new InputStreamReader(process.getInputStream(), "UTF-8");reader = new BufferedReader(inputStreamReader);String line = "";while ((line = reader.readLine()) != null) {output.append(line + "\n");}//p.destroy();//这个一般不需要} catch (Exception e) {e.printStackTrace();} finally {IOUtils.closeQuietly(reader);IOUtils.closeQuietly(inputStreamReader);}}}
2. 在线预览
package com.gblfy.office.utils;import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;/*** pdf在吸纳预览方法** @author gblfy* @date 2022-11-05*/
public class PdfPreviewUtil {/*** 在线预览方法* 把转换后的pdf文件在网页上进行预览** @param response    http响应* @param previewFile 文件的決定路径  例:/app/20191009133209_chgrpt.pdf* @throws Exception 格式转换过程中的异常*/public static void openPdf(HttpServletResponse response, String previewFile) throws Exception {InputStream inputStream = null;OutputStream outputStream = null;//String path ="/app/20191009133209_chgrpt.pdf";inputStream = new FileInputStream(previewFile);//响应文件的类型response.setContentType("application/pdf");response.setCharacterEncoding("UTF-8");outputStream = response.getOutputStream();int a = 0;byte[] b = new byte[1024];while ((a = inputStream.read(b)) != -1) {outputStream.write(b, 0, a);}if (inputStream != null) {inputStream.close();}if (outputStream != null) {outputStream.close();outputStream.flush();}}/*** 删除文件** @param filePath 文件* @return*/public static boolean deleteFile(String filePath) {boolean flag = false;File file = new File(filePath);// 路径为文件且不为空则进行删除if (file.isFile() && file.exists()) {file.delete();flag = true;}return flag;}}

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

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

相关文章

Nacos Go 微服务生态系列(一)| Dubbo-go 云原生核心引擎探索

简介&#xff1a; 作为微服务框架的核心引擎--注册中心&#xff0c;是必不可缺少的组件&#xff0c;市面已经有多款注册中心支持 Go 语言&#xff0c;应该如何选择呢&#xff1f;我们可以对目前主流的支持 Go 语言的注册中心做个对比。 作者 | 李志鹏 近几年&#xff0c;随着 …

微软每年豪砸安全研发 10 亿美元,聊聊背后的技术密码

从无序中寻找踪迹&#xff0c;从眼前事探索未来。正值 IT 黄金十年新开端&#xff0c; CSDN 欲以中立技术社区专业、客观的角度&#xff0c;深度探讨中国前沿 IT 技术演进&#xff0c;现在推出年度重磅企划——「拟合」&#xff0c;通过对话企业高管大咖&#xff0c;跟踪报道企…

Chrome浏览器直接下载pdf文件的设置步骤

使用Google Chrome浏览器&#xff0c;在点击网页中的pdf文件时&#xff0c;浏览器会直接将pdf文件打开并显示&#xff0c;要下载pdf文件的话&#xff0c;还需要进行另存操作。 有的时候我们点击pdf文件就是为了直接下载&#xff0c;而不是为了在浏览器中查看pdf文件。可以按以…

Bilibili资深运维工程师:DCDN在游戏应用加速中的实践

简介&#xff1a; bilibili资深运维工程师李宁分享《DCDN在游戏应用加速中的实践》从bilibili游戏应用的效果和成本入手&#xff0c;深入浅出地分享DCDN全站加速在游戏加速场景中的应用。 日前&#xff0c;云栖大会新一代CDN的技术突破与应用实践专场中&#xff0c;bilibili资…

java安全编码指南之:可见性和原子性

简介 java类中会定义很多变量&#xff0c;有类变量也有实例变量&#xff0c;这些变量在访问的过程中&#xff0c;会遇到一些可见性和原子性的问题。这里我们来详细了解一下怎么避免这些问题。 不可变对象的可见性 不可变对象就是初始化之后不能够被修改的对象&#xff0c;那…

Gartner:云安全的未来——中国的安全访问服务边缘架构

作者 | Gartner高级研究总监 Evan Zeng 编辑 | 宋 慧 头图 | 付费下载于东方IC Gartner最新的“安全领域新兴技术及趋势影响雷达”&#xff08;Emerging Technologies and Trends Impact Radar: Security&#xff09;显示&#xff0c;安全服务及接入边缘技术具有极高重要性&am…

springboot word excel ppt 图片aspose 转换PDF 在线预览

文章目录1. 引入依赖2. 注册工具类3. 文件转换工具类4. 文件预览工具类5. 文件处理实现类6. 文件处理入口7. 配置类8. 配置文件9. 依赖目录文件列表10. 图片转换工具类11. 测试连接12. 效果图12. 执行shell命令工具类补充1. 引入依赖 下载 Aspose 的依赖 Jar 包可以通过一下仓…

架构制图:工具与方法论

简介&#xff1a; 软件工程也是工程&#xff0c;因此传统工程制图的一些基本理论&#xff0c;在软件行业同样适用。但另一方面&#xff0c;软件与实体制造业之间还是有着本质区别&#xff0c;所以在制图方面的需求和方式也大相径庭&#xff0c;无法直接套用。作为软件行业的从业…

Gartner:云安全的未来,是安全访问服务边缘架构

作者 | Gartner高级研究总监 Evan Zeng编辑 | 宋 慧头图 | 付费下载于东方ICGartner最新的“安全领域新兴技术及趋势影响雷达”&#xff08;Emerging Technologies and Trends Impact Radar: Security&#xff09;显示&#xff0c;安全服务及接入边缘技术具有极高重要性&#x…

奥哲孟凡俊:低代码平台对当代企业智能管理的支撑

简介&#xff1a; 导读&#xff1a;在数字化时代&#xff0c;业务拓展快&#xff0c;迭变快将成为常态和主流&#xff0c;企业数字化转型除了企业内部协同提效之外&#xff0c;基于多项底层技术框架的低代码平台更是智能协作不可或缺的底层支持&#xff0c;奥哲高级副总裁兼奥哲…

yarn 不是内部或外部命令,也不是可运行的程序(亲测可用)

这个时候报 yarn 不是内部或外部命令 相信你的npm已经安装好了 方法一&#xff08;网上大多数是这个&#xff09;&#xff1a; npm install -g yarn方法二&#xff08;我的是这个&#xff09;&#xff1a;配置环境变量&#xff08;你的yarn地址直接复制上去就好了&#xff09…

基于 Flink + Hive 构建流批一体准实时数仓

简介&#xff1a; 想要搭建流式链路就必须得抛弃现有的 Hive 数仓吗&#xff1f;并不是&#xff0c;借助 Flink 可以实现已有的 Hive 离线数仓准实时化。本文整理自 Apache Flink Committer、阿里巴巴技术专家李劲松的分享&#xff0c;文章将分析当前离线数仓实时化的难点&…

腾讯云~kafka伪集群搭建

文章目录一、zookeeper伪集群搭建1. 下载安装包2. 解压安装包3. 创建目录4. 修改配置文件5. 修改dataDir&#xff0c;clientPort两个配置项5. 在data目录下创建myid文件6. 复制多个zookeeper7. 修改内存大小8. 启动zookeper9. 查看zookeeper运行状态二、kafka 伪集群搭建2.1. 下…

脚本征集大赛开启啦!100%有奖!

对一个程序爱好者来说&#xff0c;最酷的事情莫非就是用你喜欢的语言一步步实现你的idea&#xff0c; 现在用 CSDN 浏览器助手插件&#xff0c; 不仅能提升浏览器效率&#xff0c;还能在上面开发黑科技脚本&#xff0c;帮助你实现各种 idea~

蚂蚁御术:我的前端十年成长之路

我是御术&#xff0c;10年北邮毕业参加工作至今&#xff0c;刚好10年。一直觉得自己特别幸运&#xff0c;一路走来遇到了那么多好人好事&#xff0c;有机会一同做了点事情&#xff0c;由衷感激家人朋友们的支持和帮助。 自以为每一个人的发展轨迹都是不可复制的&#xff0c;过…

vue将json字符串转换为数组_json字符串、json对象、数组 三者之间的转换

var Obj JOSN.parse(“cscac”); //将JSON字符串转换成JSON对象 var “cscac” JSON.stringify(Obj) //将JSON对象转换成JSON字符串 将json对象转换成json数组 let obj JSON.parse(ress);const userinfo[];for (let i in obj ){userinfo.push(obj [i])}console.log(userinf…

看动画学算法之:排序-基数排序

简介 之前的文章我们讲了count排序&#xff0c;但是count排序有个限制&#xff0c;因为count数组是有限的&#xff0c;如果数组中的元素范围过大&#xff0c;使用count排序是不现实的&#xff0c;其时间复杂度会膨胀。 而解决大范围的元素排序的办法就是基数排序。 基数排序…

mPaaS-RPC 拦截器各种场景下的使用指南

简介&#xff1a; RPC拦截器机制在preHandle、postHandle、exceptionHandle以及H5等场景中的应用 mPaaS 移动网关服务&#xff08;Mobile Gateway Service&#xff0c;简称 MGS&#xff09;作为 mPaas 最重要的组件之一&#xff0c;连接了移动客户端与服务端&#xff0c;简化了…

npm 代理替换

npm install --registryhttps://registry.npmmirror.com# 启动服务 npm run dev发布 # 构建测试环境 npm run build:stage# 构建生产环境 npm run build:prod

数据之光 · 安全未来 | 第四届中国数据安全治理高峰论坛圆满召开!

摘要&#xff1a;5月13日&#xff0c;2021DSG峰会在京盛大开幕&#xff0c;共推数据安全治理实践落地&#xff0c;共商数据安全发展未来&#xff01; 一、五年四届&#xff0c;峰会再启 2021年5月13日&#xff0c;“第四届中国数据安全治理高峰论坛”在北京香格里拉饭店圆满召…