SpringBoot 使用LibreOffice 在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件

接上一篇:linux环境源码安装unoconv
Linux环境_源码安装Unoconv实现文件在线预览doc,doxc,xls,xlsx,ppt,pptx 文件
https://gblfy.blog.csdn.net/article/details/103540694

接上一篇:linux环境yum安装unoconv
unoconv 在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件功能环境搭建
https://gblfy.blog.csdn.net/article/details/102847276

实现原理:在Linux服务器上安装unoconv 插件,插件作用是进行doc,doxc,xls,xlsx,ppt,pptx 五种类型文件的格式转换。
最终都会转换成以后缀名.pdf结尾的pdf文件,进行在线预览。

文章目录

          • 一、环境准备:
          • 二、需求案例
          • 三、实现思路:
          • 四、Linux预览环境
          • 五、创建SpringBoot项目
          • 六、项目配置详细
            • 6.1. pom依赖:
            • 6.2. 新建controller
            • 6.3. 在线预览工具类
          • 七、linux环境测试
            • 7.1. 放置文件
            • 7.2. 运行项目
            • 7.3. 查看控制台日志
            • 7.4. 浏览器访问验证
            • 7.5. 效果图
          • 八、项目源码

一、环境准备:
软件版本
框架SpringBoot 2.1.1.RELEASE
unoconv0.6
LibreOffice6.3.2
二、需求案例

实现 doc,doxc,xls,xlsx,ppt,pptx 文件在线预览
已知条件(需求文档给出):

序号说明
文件存储路径/app/
文件名及文件格式 20191009133209lis_chgrpt.docx
访问http://192.168.6.56/viewPDF 实现在线预览
注:其他格式同上所述
三、实现思路:
序号说明
使用mvn打包项目 例:jar包
把 20191009133209lis_chgrpt.docx文件放到linux拂去其的/app/目录下面
启动项目:java -jar jarName
查看控制台日志
浏览器访问http://192.168.6.56/viewPDF 验证在线预览效果
四、Linux预览环境

服务器是Linux环境,需要在Linux服务器安装一个运行环境。详细请参考文档步骤进行安装:
unoconv 在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件功能环境搭建
https://blog.csdn.net/weixin_40816738/article/details/102847276

五、创建SpringBoot项目

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

SpringBoot 项目创建完成!!!

六、项目配置详细
6.1. pom依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.gblfy</groupId><artifactId>file-online-preview</artifactId><version>0.0.1-SNAPSHOT</version><name>file-online-preview</name><url>想学习更多知识请访问 https://gblfy.com</url><description>SpringBoot在线预览</description><properties><!--编码设置--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!--JDK版本--><java.version>1.8</java.version></properties><dependencies><!--Springmvc启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
6.2. 新建controller
package com.gblfy.file.onlinepreview.controller;import com.gblfy.file.onlinepreview.utils.LinuxPageDIsplsyFileUtil;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;/*** @author gblfy* @ClassNme FileController* @Description 文件在在线预览* @Date 2019/11/1 8:09* @version1.0*/
@RestController
public class FileOnlinePreviewController {/*** 在线预览测试方法* 企业真实需求:* 文件的路径 文件名 都需要动态获取** @param response  http响应网页来实现在线预览* @throws Exception*/@RequestMapping("/viewPDF")public void reviewWord(HttpServletResponse response)throws Exception{LinuxPageDIsplsyFileUtil linuxPageDIsplsyFileUtil = new LinuxPageDIsplsyFileUtil();//文件存储路径String fileStoragePath ="/app/";//转换前的文件名String beforeConversion ="20191009133209lis_chgrpt.docx";/*** 文件格式转换+在线预览*/linuxPageDIsplsyFileUtil.conversionFile(response,fileStoragePath,beforeConversion);}@RequestMapping("/viewPDF2")public void reviewWord2(HttpServletResponse response)throws Exception{LinuxPageDIsplsyFileUtil linuxPageDIsplsyFileUtil = new LinuxPageDIsplsyFileUtil();//文件存储路径String fileStoragePath ="/app/";//转换前的文件名String beforeConversion ="2019101114041220190929142601新人业务知识培训2017.pdf";/*** 文件格式转换+在线预览*/linuxPageDIsplsyFileUtil.conversionFile(response,fileStoragePath,beforeConversion);}
}
6.3. 在线预览工具类
package com.gblfy.word.utils;import org.apache.commons.io.IOUtils;import javax.servlet.http.HttpServletResponse;
import java.io.*;/*** @Author : gblfy* @Date : 2019/11/01  11:20* @describe: 文档在线预览* <p>* 服务器环境:Linux环境* 现支持文档类型: Excel  word  ppt pdf*/
public class LinuxPageDIsplsyFileUtil {private static LinuxPageDIsplsyFileUtil linuxPageDIsplsyFileUtil;public static synchronized LinuxPageDIsplsyFileUtil getSwitchUtil() {if (linuxPageDIsplsyFileUtil == null) {linuxPageDIsplsyFileUtil = new LinuxPageDIsplsyFileUtil();}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)) {/*** 在线预览方法*/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 {/*** 格式转换方法*///String temp ="/usr/bin/unoconv -f pdf " + command;executeCommand(command);/*** 在线预览方法*/openPdf(response, fileStoragePath + interceptFileName + ".pdf");}/*** 在线预览方法* 把转换后的pdf文件在网页上进行预览** @param response    http响应* @param previewFile 文件的決定路径  例:/app/20191009133209_chgrpt.pdf* @throws Exception 格式转换过程中的异常*/private 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");outputStream = response.getOutputStream();int a = 0;byte[] b = new byte[1024];while ((a = inputStream.read(b)) != -1) {outputStream.write(b, 0, a);}if (outputStream != null) {outputStream.close();}if (inputStream != null) {inputStream.close();}}/*** 格式转换方法* <p>* 統一把文件转换成pdf文件** @param command 文件格式转换命令   例:/usr/bin/unoconv -f pdf  /app/1.pptx* @throws Exception 格式转换过程中的异常*/private static void executeCommand(String command) throws Exception {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);}}
}
七、linux环境测试
7.1. 放置文件

在这里插入图片描述

在这里插入图片描述

7.2. 运行项目
nohup java -jar jarName >msg.log 2>&1 &
7.3. 查看控制台日志
tail -f msg.log
7.4. 浏览器访问验证
#在线预览docx
http://192.xxx.xxx.xxxxx/viewPDF
#在线预览pdf
http://192.xxx.xxx.xxxxx/viewPDF2
7.5. 效果图

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

八、项目源码

gitlab地址:https://gitlab.com/gb-heima/file-online-preview

学习更多技术知识,请移步https://gblfy.com主页

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

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

相关文章

裸辞面11家python公司,拿到4个offer!网友:买了简历置顶会员吗?

我一直认为&#xff0c;敢裸辞的只有2种人&#xff1a;1、能力足够强&#xff0c;即使裸辞也不会被财务问题所困&#xff0c;更不愁找工作。2、年轻气盛&#xff0c;遇到傻X领导和傻X同事&#xff0c;绝对0容忍&#xff01;但是最近我在刷某乎的时候&#xff0c;发现了第三种人…

万用表怎么测电池内阻_数字万用表和指针万用表,两者怎么选?

​万用表又称为复用表、多用表、三用表、繁用表等&#xff0c;一般以测量电压、电流和电阻为主要目的。是一种多功能、多量程的测量仪表&#xff0c;可测量直流电流、直流电压、交流电流、交流电压、电阻和音频电平等&#xff0c;有的还可以测交流电流、电容量、电感量及半导体…

在Linux系统上安装Git

Git是目前流行的非常好用的版本控制工具&#xff0c;这里介绍两种安装方式&#xff0c;1、yum安装&#xff0c;2、从github上下载最新的源码编译后安装 文章目录一、yum安装二、从GitHub上下载最新的源码编译后安装1、下载tar包2、上传tar包3、解压压缩包4、进入到解压后的文件…

Michael Jordan:当下的AI其实都是伪“AI”

摘要&#xff1a; Michael Jordan认真的解读当下的AI到底是什么&#xff1f;人工智能&#xff08;AI&#xff09;是未来的趋势&#xff0c;这句话是技术人员、学者、记者和风险投资家一致赞同的。如同从技术学术领域跨越到普遍行业的许多词语一样&#xff0c;在使用这些词语的时…

如何提升员工体验 助力企业业务增长?这个棘手的问题终于被解决了!

戳蓝字“CSDN云计算”关注我们哦&#xff01;相信大部分人都经历过入职第一天的手忙脚乱与无所适从&#xff0c;一份新的工作本就是一项全新的挑战&#xff0c;各种设备的安装与链接、安装适应任何新任务的应用流程&#xff0c;以及令人头疼的各种密码&#xff0c;凡此种种都为…

vb 打印机 任意尺寸_创新小黑管“省心省力”惠普Laser NS 1020 智能闪充激光打印机...

对于小型公司、个人工作室或者有打印需求的家庭用户来说&#xff0c;一款优秀的轻巧、便携的打印机必不可少。前不久&#xff0c;惠普推出了全新一代惠普Laser NS 1020打印机&#xff0c;采用突破性的智能闪充碳粉技术&#xff0c;可实现15秒充粉&#xff0c;简便省时&#xff…

隐私与机器学习,二者可以兼得吗?

摘要&#xff1a; 隐私数据与机器学习看似矛盾&#xff0c;其实不然。如何有效保护机器学习训练中的隐私数据&#xff1f;谷歌专家给出了答案——PATE框架&#xff0c;就算你不太懂隐私保护的知识&#xff0c;也可以通过PATE框架来保护机器学习里的训练数据。最近关于互联网隐私…

SpringBoot 深度调优,让你的项目飞起来!

文章目录项目调优一、修改配置文件项目调优 作为一名工程师&#xff0c;项目调优这事&#xff0c;是必须得熟练掌握的事情。 在SpringBoot项目中&#xff0c;调优主要通过配置文件和配置JVM的参数的方式进行。 一、修改配置文件 关于修改配置文件application.properties。 …

青年PM倪超:想让程序员多一点点幸福感

摘要&#xff1a; 本文主人公倪超&#xff0c;在内部&#xff0c;同事都习惯叫他花名银时&#xff0c;是阿里云产品经理。前不久&#xff0c;他所负责的企业级分布式应用服务EDAS&#xff0c;荣获了公司2018财年年度最佳产品奖。在五四青年节来临之际&#xff0c;我们有幸近距离…

C语言--if...else语句【语法讲解】

一.if...else语句的介绍 if…else 语句是编程中常用的一种分支语句&#xff0c;用于根据条件执行不同的操作。 它的基本语法如下&#xff1a; if (条件表达式) {// 当条件表达式为真时执行的代码块 } else {// 当条件表达式为假时执行的代码块 } 当条件表达式为真时&#xff…

黑苹果找不到触控板_猫和老鼠手游:好友位不足却找不到人开黑?玩家给好友系统支招...

猫追鼠&#xff0c;鼠躲猫&#xff0c;欢乐互动乐逍遥&#xff0c;欢迎你来到猫和老鼠游戏学院第126期。随着开学季的到来&#xff0c;我们在游戏中会发现一个有趣的现象&#xff1a;任何时候打开自己的好友界面&#xff0c;里面都是灰色一片&#xff0c;不可否认这确实和玩家群…

Serverless 的喧哗与骚动

戳蓝字“CSDN云计算”关注我们哦&#xff01;导读&#xff1a;从 2016 年 AWS 发布 Lambda 以来&#xff0c;全世界的开发者和云厂商对 Serverless 的热情在不断高涨。假设不想在开发应用程序并将其部署在服务器上的过程细节上花费精力&#xff0c;是否有一种简单的架构模型能够…

2018年最佳深度学习书单

摘要&#xff1a; AI人才缺口巨大&#xff1f;如果你想成为AI革命中的一员&#xff0c;那么你就必须要学习深度学习&#xff0c;看看这12本书&#xff0c;它们将成为你的利器&#xff01;我相信你应该知道人工智能&#xff0c;尤其是深度学习在过去5年左右取得了不错的进步。 深…

双绞线传输距离_视频监控系统中布线常用传输线缆分类及制作方法

同轴电缆&#xff1a;同轴电缆同轴电缆可分为两种基本类型&#xff0c;基带同轴电缆和宽带同轴电缆。目前基带是常用的电缆&#xff0c;其屏蔽线是用铜做成的网状的&#xff0c;特征阻抗为75(如RG-8、RG-58等)&#xff1b;宽带同轴电缆常用的电缆的屏蔽层通常是用铝冲压成的&am…

国庆出游,这个银行卡大小的充电宝一定要带

说到充电宝&#xff0c;不知道有没有人跟我有同样的烦恼&#xff1a;5000毫安容量小&#xff0c;不够用。10000毫安容量够用&#xff0c;但又大又笨重&#xff0c;拿在手里充电超累的&#xff0c;还占地方&#xff01;尤其是旅行出差的时候&#xff0c;这种体验更加明显&#x…

HBase运维基础——元数据逆向修复原理

摘要&#xff1a; 鉴于上次一篇文章——“云HBase小组成功抢救某公司自建HBase集群&#xff0c;挽救30T数据”的读者反馈&#xff0c;对HBase的逆向工程比较感兴趣&#xff0c;并咨询如何使用相应工具进行运维等等。总的来说&#xff0c;就是想更深层理解HBase运维原理&#xf…

50多种适合机器学习和预测应用的API,你的选择是?(2018年版本)

摘要&#xff1a; 本文盘点了2018年以来人脸和图像识别、文本分析、自然语言处理、情感分析、语言翻译、 机器学习和预测这几个领域常用的API&#xff0c;读者可以根据自己需求选择合适的API完成相应的任务。对于做工程项目和搞科研的人来说&#xff0c;有现成的模块或工具使用…

谷歌10月15日发布 Pixel 4;高通以31亿美元收购与TDK公司权益;甲骨文、VMware就云技术及支持达成协议……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 荣耀 Play 3&#xff08;图片…

天线巴伦制作和原理_10米段的春天 | 用自制环型天线+改装SDR接收器27MHz采访实录...

&#xff28;&#xff26;部分包括&#xff19;个不同的波段&#xff0c;范围从&#xff11;&#xff0e;&#xff18;&#xff2d;&#xff28;&#xff5a;到&#xff12;&#xff19;&#xff0e;&#xff17;&#xff2d;&#xff28;&#xff5a;&#xff0c;它们通常也称…

JAVA实现onvif的ptz控制_使用Onvif协议进行设备PTZ云台控制

接上一篇使用Onvif协议最重要的应用就是对设备进行PTZ云台控制&#xff0c;PTZ控制包含转动、变焦等&#xff0c;这里我们主要讨论常用的转动和变焦(也就是放大缩小)流程要进行设备PTZ控制&#xff0c;我们首先需要获取到设备的Device Service Address和此设备的用户名密码前两…