一、简介
需求:根据文件 url ,实现文件在线预览
解决方法:
1、前端
前端可以直接使用微软的共有接口来在线浏览office产品(word/excel/ppt),如下:
<iframe src='https://view.officeapps.live.com/op/view.aspx?src=你的文件地址' width='100%' height='100%' frameborder='1'>
看起来简介明了,但是有个缺点:你的文件地址必须对外可访问。其原理是通过请求微软的服务去解析你的文件,如果你的文件对外不可访问,这个方法就不行。
2、后端
前端实现不了,只能后端用Java来处理了,思路是利用 open office 将文件转换成pdf或者html,我的实现方法是word/ppt转成pdf,excel转成html。excel转成html,转成PDF格式超级丑。
二、实现文件转换
前言:
按下面两种方法实现,都有点麻烦,且最后成功了预览大文件有任务阻塞,导致后面的预览都预览不了,所以推荐下面链接这个方法,如果不是用springboot也可以改改相关代码,亲测有效!
https://blog.csdn.net/starboyss/article/details/78498974
Java开发预览word/excel/ppt需要安装open office,在windows和linux系统上都需要安装。
window安装:注意下载软件安装的时候,在安装类型选择的时候选择自定义安装,在自定义安装的时候要选择文件安装地址,这个地址是最后需要使用到的地址。安装完成后有一个openOffice 4/program文件夹。
openOffice相关jar包主要有两个版本,一种是和代码在同一台服务器上,一种是安装在远程的其他服务器上。前者支持office03/07文件转换,后者仅支持office03文件转换,可以通过将07版本的后缀改成03版本的方式来解决此问题,具体下面有代码。
(一)和代码在同一台服务器上
引入jar包
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-core</artifactId>
<version>4.0.0-RELEASE</version>
</dependency>
相关代码:
import com.ctrip.common.exception.BusinessException;
import com.ctrip.framework.clogging.agent.log.ILog;
import com.ctrip.framework.clogging.agent.log.LogManager;
import org.jodconverter.OfficeDocumentConverter;
import org.jodconverter.office.DefaultOfficeManagerBuilder;
import org.jodconverter.office.OfficeException;
import org.jodconverter.office.OfficeManager;
import java.io.File;
import java.io.IOException;
import java.util.regex.Pattern;
//启动openoffice方法靠路径
public class Office2PreviewFile {
private static ILog logger = LogManager.getLogger(Office2PreviewFile.class);
/**
* 将office格式的文件转为pdf
*
* @param sourceFile 源文件
* @param targetFilePath 生成的pdf/html文件保存地址
* @return pdf文件
*/
public static File fileToPreviewFile(File sourceFile, String targetFilePath) throws BusinessException {
try {
//启动openOffice
OfficeManager officeManager = getOfficeManager();
OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
return