如何用Java实现word、excel、ppt、txt等办公文件在线预览功能

java实现办公文件在线预览功能是一个大家在工作中也许会遇到的需求,网上些公司专门提供这样的服务,不过需要收费

如果想要免费的,可以用openoffice,实现原理就是:

通过第三方工具openoffice,将word、excel、ppt、txt等文件转换为pdf文件流;

当然如果装了Adobe Reader XI,那把pdf直接拖到浏览器页面就可以直接打开预览,前提就是浏览器支持pdf文件浏览。

我这里介绍通过poi实现word、excel、ppt转pdf流,这样就可以在浏览器上实现预览了。

1.到官网下载Apache OpenOffice 安装包,安装运行。(不同系统的安装方法,自行百度,这里不做过多说明)

2.再项目的pom文件中引入依赖

com.artofsolving

jodconverter

2.2.1

3.将word、excel、ppt转换为pdf流的工具类代码

import com.artofsolving.jodconverter.DefaultDocumentFormatRegistry;

import com.artofsolving.jodconverter.DocumentConverter;

import com.artofsolving.jodconverter.DocumentFormat;

import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;

import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;

import com.artofsolving.jodconverter.openoffice.converter.StreamOpenOfficeDocumentConverter;

import java.io.*;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLConnection;

/**

  • 文件格式转换工具类

  • @author tarzan

  • @version 1.0

  • @since JDK1.8

*/

public class FileConvertUtil {

/** 默认转换后文件后缀 */

private static final String DEFAULT_SUFFIX = “pdf”;

/** openoffice_port */

private static final Integer OPENOFFICE_PORT = 8100;

/**

  • 方法描述 office文档转换为PDF(处理本地文件)

  • @param sourcePath 源文件路径

  • @param suffix 源文件后缀

  • @return InputStream 转换后文件输入流

  • @author tarzan

*/

public static InputStream convertLocaleFile(String sourcePath, String suffix) throws Exception {

File inputFile = new File(sourcePath);

InputStream inputStream = new FileInputStream(inputFile);

return covertCommonByStream(inputStream, suffix);

}

/**

  • 方法描述 office文档转换为PDF(处理网络文件)

  • @param netFileUrl 网络文件路径

  • @param suffix 文件后缀

  • @return InputStream 转换后文件输入流

  • @author tarzan

*/

public static InputStream convertNetFile(String netFileUrl, String suffix) throws Exception {

// 创建URL

URL url = new URL(netFileUrl);

// 试图连接并取得返回状态码

URLConnection urlconn = url.openConnection();

urlconn.connect();

HttpURLConnection httpconn = (HttpURLConnection) urlconn;

int httpResult = httpconn.getResponseCode();

if (httpResult == HttpURLConnection.HTTP_OK) {

InputStream inputStream = urlconn.getInputStream();

return covertCommonByStream(inputStream, suffix);

}

return null;

}

/**

  • 方法描述 将文件以流的形式转换

  • @param inputStream 源文件输入流

  • @param suffix 源文件后缀

  • @return InputStream 转换后文件输入流

  • @author tarzan

*/

public static InputStream covertCommonByStream(InputStream inputStream, String suffix) throws Exception {

ByteArrayOutputStream out = new ByteArrayOutputStream();

OpenOfficeConnection connection = new SocketOpenOfficeConnection(OPENOFFICE_PORT);

connection.connect();

DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);

DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry();

DocumentFormat targetFormat = formatReg.getFormatByFileExtension(DEFAULT_SUFFIX);

DocumentFormat sourceFormat = formatReg.getFormatByFileExtension(suffix);

converter.convert(inputStream, sourceFormat, out, targetFormat);

connection.disconnect();

return outputStreamConvertInputStream(out);

}

/**

  • 方法描述 outputStream转inputStream

  • @author tarzan

*/

public static ByteArrayInputStream outputStreamConvertInputStream(final OutputStream out) throws Exception {

ByteArrayOutputStream baos=(ByteArrayOutputStream) out;

return new ByteArrayInputStream(baos.toByteArray());

}

public static void main(String[] args) throws IOException {

//convertNetFile(“http://172.16.10.21/files/home/upload/department/base/2019120
90541573c6abdf2394d4ae3b7049dcee456d4f7.doc”, “.pdf”);

//convert(“c:/Users/admin/Desktop/2.pdf”, “c:/Users/admin/Desktop/3.pdf”);

}

}

4.serve层在线预览方法代码

/**

  • @Description:系统文件在线预览接口

  • @Author: tarzan

*/

public void onlinePreview(String url, HttpServletResponse response) throws Exception {

//获取文件类型

String[] str = SmartStringUtil.split(url,“\.”);

if(str.length==0){

throw new Exception(“文件格式不正确”);

}

String suffix = str[str.length-1];

if(!suffix.equals(“txt”) && !suffix.equals(“doc”) && !suffix.equals(“docx”) && !suffix.equals(“xls”)

&& !suffix.equals(“xlsx”) && !suffix.equals(“ppt”) && !suffix.equals(“pptx”)){

throw new Exception(“文件格式不支持预览”);

}

InputStream in=FileConvertUtil.convertNetFile(url,suffix);

OutputStream outputStream = response.getOutputStream();

//创建存放文件内容的数组

byte[] buff =new byte[1024];

//所读取的内容使用n来接收

int n;

//当没有读取完时,继续读取,循环

while((n=in.read(buff))!=-1){

//将字节数组的数据全部写入到输出流中

outputStream.write(buff,0,n);

}

//强制将缓存区的数据进行输出

outputStream.flush();

//关流

outputStream.close();

in.close();

}

5.controler层代码

@ApiOperation(value = “系统文件在线预览接口 by tarzan”)
@PostMapping(“/api/file/onlinePreview”)
public void onlinePreview(@RequestParam(“url”) String url, HttpServletResponse response) throws Exception{
fileService.onlinePreview(url,response);
}

最后

小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你需要这些资料,⬅专栏获取
这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-T9FvnlIK-1719683982525)]

[外链图片转存中…(img-9jCV4AO4-1719683982526)]

[外链图片转存中…(img-LPZxRQFb-1719683982526)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你需要这些资料,⬅专栏获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值