參考網址
https://blog.csdn.net/qq_42944520/article/details/90607328
https://www.cnblogs.com/liran123/p/9846349.html
https://blog.csdn.net/qingtian_1993/article/details/79901843
一、引入資源包
<!-- 文件在線查看 -->
<!--jodconverter 核心包 -->
<!-- https://mvnrepository.com/artifact/org.jodconverter/jodconverter-core -->
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-core</artifactId>
<version>4.2.2</version>
</dependency>
<!--springboot支持包,裏面包括了自動配置類 -->
<!-- https://mvnrepository.com/artifact/org.jodconverter/jodconverter-spring-boot-starter -->
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-spring-boot-starter</artifactId>
<version>4.2.2</version>
</dependency>
<!--jodconverter 本地支持包 -->
<!-- https://mvnrepository.com/artifact/org.jodconverter/jodconverter-local -->
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-local</artifactId>
<version>4.2.2</version>
</dependency>
<!--openoffice 依賴jar包 -->
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.1</version>
</dependency>
二、安裝OpenOffice4.1.7
http://www.openoffice.org/download/index.html
至於安裝方法(直接下一步直到安裝成功即可)
三、編寫controller
package com.donglian.file.wdgl.controller;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.jodconverter.DocumentConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.donglian.util.FtpUtils;
import com.donglian.util.IDUtil;
import com.donglian.util.ResultWarp;
import com.donglian.util.StringUtil;
import com.donglian.util.UseridUtil;
/**
*
* @ClassName: FileCotroller
* @Description:(文件管理)
* @author: fkx
* @date: 2019年10月23日 下午4:14:56
*/
@RestController
@RequestMapping("web/file/")
public class FileCotroller{
@Autowired
private FileService fileService;
@Autowired
private UseridUtil useridUtil;
@Autowired
private FileMapper fileMapper;
// 第一步:轉換器直接注入
@Autowired
private DocumentConverter converter;
/**
* 文件在線查看靜態
* @param fileid
* @return
*/
@RequestMapping(value = "lookFile" ,method = RequestMethod.GET)
public ResultWarp lookFile(HttpServletRequest request, HttpServletResponse response) {
try {
File file = new File("D:/test/Linx命令.txt");//需要轉換的文件
File newFile = new File("D:/test");//轉換之後文件生成的地址
if (!newFile.exists()) {
newFile.mkdirs();
}
//文件轉化
converter.convert(file).to(new File("D:/test/common.pdf")).execute();
//使用response,將pdf文件以流的方式發送的前端
ServletOutputStream outputStream = response.getOutputStream();
InputStream in = new FileInputStream(new File("D:/test/common.pdf"));// 讀取文件
// copy文件
int i = IOUtils.copy(in, outputStream);
System.out.println(i);
in.close();
outputStream.close();
return new ResultWarp(ResultWarp.SUCCESS,"ok");
} catch (Exception e) {
e.printStackTrace();
return new ResultWarp(ResultWarp.FAILED, "服務異常");
}
}
/**
* 文件在線查看
* @param fileid
* @return
*/
@RequestMapping(value = "lookFile1" ,method = RequestMethod.GET)
public ResultWarp lookFile1(HttpServletRequest request, HttpServletResponse response, String fileid) {
try {
TFileManagerEntity file=fileService.viewFile(fileid);
//文件不屬於docx/doc/xlsx/xls/pptx/ppt/txt/jpg/jpeg/png/gif/pdf類型不能在線查看
List<String> list = Arrays.asList("docx","doc","xlsx","xls","pptx","ppt","txt","jpg","jpeg","png","gif","pdf");
if(list.contains(file.getFilesuffix().toLowerCase())) {
InputStream ins=FtpUtils.getFileOnlineLook(file.getUrl(), fileid+"."+file.getFilesuffix());
File newFile = new File("/testPdf");//轉換之後文件生成的地址
if (!newFile.exists()) {
newFile.mkdirs();
}
//寫出文件
FileOutputStream out = new FileOutputStream("/testPdf/"+fileid+"."+file.getFilesuffix());
int data;
while((data = ins.read()) != -1) {
out.write(data);
}
File fileStart=new File("/testPdf/"+fileid+"."+file.getFilesuffix());
//判斷如果文件是pdf不需要轉化
if(!file.getFilesuffix().toLowerCase().equals("pdf")) {
//文件轉化
converter.convert(fileStart).to(new File("/testPdf/"+fileid+".pdf")).execute();
//fileStart.delete();//轉化完成後刪除轉化之前的文件
}
//使用response,將pdf文件以流的方式發送的前端
ServletOutputStream outputStream = response.getOutputStream();
File fileEnd=new File("/testPdf/"+fileid+".pdf");
InputStream in = new FileInputStream(fileEnd);// 讀取文件
// copy文件
IOUtils.copy(in, outputStream);
ins.close();
out.close();
in.close();
outputStream.close();
fileStart.delete();//轉化完成後刪除轉化之前的文件
fileEnd.delete();//輸出到頁面後刪除pdf文件
return new ResultWarp(ResultWarp.SUCCESS,"ok");
}
return new ResultWarp(ResultWarp.FAILED,file.getFilesuffix()+":該文件類型目前不支持在線查看");
} catch (Exception e) {
e.printStackTrace();
return new ResultWarp(ResultWarp.FAILED, "服務異常");
}
}
}