网站管理内容,重庆搜索引擎优化seo,wordpress怎么使用七牛,国外网站建设视频教学此项目根据企业真实需求制作而成#xff0c;希望能帮助大家解决在线预览的问题#xff01; 此项目已开源#xff0c;欢迎大家来STAR 软件版本SpringBoot2.2.2.RELEASELibreOffice6.3.2unoconv0.6文章目录一、配置管理① pom② yml③ controller④ 文件格式转换工具类FileFor… 此项目根据企业真实需求制作而成希望能帮助大家解决在线预览的问题 此项目已开源欢迎大家来STAR 软件版本SpringBoot2.2.2.RELEASELibreOffice6.3.2unoconv0.6文章目录一、配置管理① pom② yml③ controller④ 文件格式转换工具类FileFormatConverToPDF⑤ 在线预览previewPDFUtils⑥ 启动类二、测试验证①测试链接②测试效果三、安装Unoconv①yum安装Unoconv②源码安装Unoconv四、安装LibreOffice一、配置管理
① pom
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.2.2.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.gblfy/groupIdartifactIdbusiness-online-preview/artifactIdversion0.0.1-SNAPSHOT/versionnamebusiness-online-preview/nameurlhttps://gblfy.com/urldescription在线预览/descriptionpropertiesjava.version1.8/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.apache.poi/groupIdartifactIdpoi/artifactIdversion4.0.0/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project
② yml
空
③ controller
package com.gblfy.onlinepreview.controller;import com.gblfy.onlinepreview.utils.FileFormatConverToPDF;
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 2020/01/08 8:09* version1.0*/
RestController
public class FileOnlinePreviewController {/*** 在线预览测试方法* 企业真实需求:* 文件的路径 文件名 都需要动态获取** param response http响应网页来实现在线预览* throws Exception*/RequestMapping(/viewPDF)public void reviewWord(HttpServletResponse response) throws Exception {FileFormatConverToPDF linuxPageDIsplsyFileUtil new FileFormatConverToPDF();//文件存储路径String fileStoragePath /app/ftpFileDir/testFileDir/businessLearning/;//转换前的文件名String beforeConversion 知识库建设方案2019-11-11.docx;/*** 文件格式转换在线预览*/linuxPageDIsplsyFileUtil.conversionFile(response, fileStoragePath, beforeConversion);}
}
④ 文件格式转换工具类FileFormatConverToPDF
package com.gblfy.onlinepreview.utils;import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.IOUtils;import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
import java.util.List;/*** Author:* Date: 2019/1/15 0015 15:04* describe 文档在线预览 (服务器环境为Linux环境) 目前文档类型 仅开放 Excel 03/07 word 03/07 ppt 03/07*/
Slf4j
public class FileFormatConverToPDF {//libreoffice 文件格式转换shell命令public static final String LIBREOFFICE_SHELLCMD /usr/bin/soffice --headless --invisible --convert-to pdf ;//unoconv 文件格式转换shell命令public static final String UNOCONV_SHELLCMD /usr/bin/unoconv -f pdf ;//previewfile_dir 需要预览的pdf目录public static final String PREVIEWFILE_DIR /root/;private static FileFormatConverToPDF linuxPageDIsplsyFileUtil;public static synchronized FileFormatConverToPDF getSwitchUtil() {if (linuxPageDIsplsyFileUtil null) {linuxPageDIsplsyFileUtil new FileFormatConverToPDF();}return linuxPageDIsplsyFileUtil;}/*** 文档在线预览** param response* param fileStoragePath 文件存储路径 (前段获取文件存储路径返给后台)* param beforeConversion 文件名(必须带文件后缀名这里指的就是文件全名称)* throws Exception*/public void conversionFile(HttpServletResponse response, String fileStoragePath, String beforeConversion) throws Exception {String fileNamePath fileStoragePath beforeConversion;log.info(文件路径 fileNamePath);File file new File(fileNamePath);if (!file.exists()) {log.info(库存中没有指定文件。。。。);return;}//获取到文件名String interceptFileName beforeConversion.substring(0, beforeConversion.lastIndexOf(.));//截取文件后缀名String fileNameSuffix beforeConversion.substring(beforeConversion.lastIndexOf(.) 1);String command null;System.out.println(获取到文件名 interceptFileName);System.out.println(截取文件后缀名 fileNameSuffix);if (doc.equals(fileNameSuffix)|| docx.equals(fileNameSuffix)|| xls.equals(fileNameSuffix)|| xlsx.equals(fileNameSuffix)|| ppt.equals(fileNameSuffix)|| pptx.equals(fileNameSuffix)) {System.out.println(此文件属于 fileNameSuffix 开始进行转换);command LIBREOFFICE_SHELLCMD fileNamePath;executeLinuxCmd(command);} else {command UNOCONV_SHELLCMD fileNamePath;executeCommand(command);}System.out.println(openPDF的参数 fileStoragePath interceptFileName);previewPDFUtils.openPdf(response, PREVIEWFILE_DIR interceptFileName .pdf);}/*** 使用LibreOffice进行格式转换 to pdf** param cmd* return* throws IOException*/public static ListString executeLinuxCmd(String cmd) throws IOException {log.info(执行文件转换的命令: cmd);Runtime run Runtime.getRuntime();Process process run.exec(new String[]{/bin/sh, -c, cmd});InputStream in process.getInputStream();BufferedReader bs new BufferedReader(new InputStreamReader(in));ListString list new ArrayListString();String result null;while ((result bs.readLine()) ! null) {log.info(job result [ result ]);list.add(result);}in.close();process.destroy();return list;}/*** 使用Unoconv进行格式转换 to pdf** param command* throws Exception*/private static void executeCommand(String command) throws Exception {log.info(执行文件转换的命令: 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);}}
}⑤ 在线预览previewPDFUtils
package com.gblfy.onlinepreview.utils;import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;/*** author gblfy* ClassNme previewPDF* Description TODO* Date 2020/1/8 12:47* version1.0*/
public class previewPDFUtils {/*** 在线预览pdf文件** param response* param previewFile 预览pdf文件的绝对路径* throws Exception*/public static void openPdf(HttpServletResponse response, String previewFile) throws Exception {InputStream inputStream null;OutputStream outputStream null;System.out.println(进入openPDF previewFile);//String path /home/tubiao/桌面/优化数据库.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();}}
}⑥ 启动类
package com.gblfy.onlinepreview;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** 在线预览统一入口*/
SpringBootApplication
public class OnlinePreviewApplication {public static void main(String[] args) {SpringApplication.run(OnlinePreviewApplication.class, args);System.out.println(启动成功);}
}二、测试验证
①测试链接
浏览器测试链接http://localhost:8888/viewPDF
②测试效果 三、安装Unoconv
①yum安装Unoconv unoconv 在线预览 docdoxcxlsxlsxpptpptx 文件功能环境搭建 https://gblfy.blog.csdn.net/article/details/102847276 ②源码安装Unoconv 企业内部Linux环境_源码安装Unoconv实现文件在线预览docdoxcxlsxlsxpptpptx 文件 https://gblfy.blog.csdn.net/article/details/103540694 四、安装LibreOffice 企业内部Linux环境_源码安装LibreOffice实现文件在线预览docdoxcxlsxlsxpptpptx 文件 https://gblfy.blog.csdn.net/article/details/103861905 友情链接 (企业内部)SpringBoot 使用LibreOffice 在线预览 docdoxcxlsxlsxpptpptx 文件 https://gblfy.blog.csdn.net/article/details/103861607