1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Java 实现word excel ppt txt等办公文件预览功能!

Java 实现word excel ppt txt等办公文件预览功能!

时间:2023-07-19 12:39:25

相关推荐

Java 实现word excel ppt txt等办公文件预览功能!

大家好,我是宝哥!

如何用 Java 实现word、excel、ppt、txt等办公文件在线预览功能?本文告诉你答案!

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

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

通过第三方工具openoffice,将word、excel、ppt、txt等文件转换为pdf文件流;当然如果装了Adobe Reader XI,那把pdf直接拖到浏览器页面就可以直接打开预览,前提就是浏览器支持pdf文件浏览。

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

到官网下载 Apache OpenOffice:

/download

安装包,安装运行。(不同系统的安装方法,自行百度,这里不做过多说明)

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

<!--openoffice--><dependency><groupId>com.artofsolving</groupId><artifactId>jodconverter</artifactId><version>2.2.1</version></dependency>

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

importcom.artofsolving.jodconverter.DefaultDocumentFormatRegistry;importcom.artofsolving.jodconverter.DocumentConverter;importcom.artofsolving.jodconverter.DocumentFormat;importcom.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;importcom.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;importcom.artofsolving.jodconverter.openoffice.converter.StreamOpenOfficeDocumentConverter;importjava.io.*;.HttpURLConnection;.URL;.URLConnection/** *文件格式转换工具类 */publicclassFileConvertUtil{/**默认转换后文件后缀*/privatestaticfinalStringDEFAULT_SUFFIX="pdf";/**openoffice_port*/privatestaticfinalIntegerOPENOFFICE_PORT=8100;/** *方法描述office文档转换为PDF(处理本地文件) * *@paramsourcePath源文件路径 *@paramsuffix源文件后缀 *@returnInputStream转换后文件输入流 */publicstaticInputStreamconvertLocaleFile(StringsourcePath,Stringsuffix)throwsException{FileinputFile=newFile(sourcePath);InputStreaminputStream=newFileInputStream(inputFile);returncovertCommonByStream(inputStream,suffix);}/** *方法描述office文档转换为PDF(处理网络文件) * *@paramnetFileUrl网络文件路径 *@paramsuffix文件后缀 *@returnInputStream转换后文件输入流 */publicstaticInputStreamconvertNetFile(StringnetFileUrl,Stringsuffix)throwsException{//创建URLURLurl=newURL(netFileUrl);//试图连接并取得返回状态码URLConnectionurlconn=url.openConnection();urlconn.connect();HttpURLConnectionhttpconn=(HttpURLConnection)urlconn;inthttpResult=httpconn.getResponseCode();if(httpResult==HttpURLConnection.HTTP_OK){InputStreaminputStream=urlconn.getInputStream();returncovertCommonByStream(inputStream,suffix);}returnnull;}/** *方法描述将文件以流的形式转换 * *@paraminputStream源文件输入流 *@paramsuffix源文件后缀 *@returnInputStream转换后文件输入流 */publicstaticInputStreamcovertCommonByStream(InputStreaminputStream,Stringsuffix)throwsException{ByteArrayOutputStreamout=newByteArrayOutputStream();OpenOfficeConnectionconnection=newSocketOpenOfficeConnection(OPENOFFICE_PORT);connection.connect();DocumentConverterconverter=newStreamOpenOfficeDocumentConverter(connection);DefaultDocumentFormatRegistryformatReg=newDefaultDocumentFormatRegistry();DocumentFormattargetFormat=formatReg.getFormatByFileExtension(DEFAULT_SUFFIX);DocumentFormatsourceFormat=formatReg.getFormatByFileExtension(suffix);converter.convert(inputStream,sourceFormat,out,targetFormat);connection.disconnect();returnoutputStreamConvertInputStream(out);}/** *方法描述outputStream转inputStream */publicstaticByteArrayInputStreamoutputStreamConvertInputStream(finalOutputStreamout)throwsException{ByteArrayOutputStreambaos=(ByteArrayOutputStream)out;returnnewByteArrayInputStream(baos.toByteArray());}publicstaticvoidmain(String[]args)throwsIOException{//convertNetFile("http://172.16.10.21/files/home/upload/department/base/12090541573c6abdf2394d4ae3b7049dcee456d4f7.doc",".pdf");//convert("c:/Users/admin/Desktop/2.pdf","c:/Users/admin/Desktop/3.pdf");}}

serve层在线预览方法代码

/** *@Description:系统文件在线预览接口 *@Author:tarzan */publicvoidonlinePreview(Stringurl,HttpServletResponseresponse)throwsException{//获取文件类型String[]str=SmartStringUtil.split(url,"\\.");if(str.length==0){thrownewException("文件格式不正确");}Stringsuffix=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")){thrownewException("文件格式不支持预览");}InputStreamin=FileConvertUtil.convertNetFile(url,suffix);OutputStreamoutputStream=response.getOutputStream();//创建存放文件内容的数组byte[]buff=newbyte[1024];//所读取的内容使用n来接收intn;//当没有读取完时,继续读取,循环while((n=in.read(buff))!=-1){//将字节数组的数据全部写入到输出流中outputStream.write(buff,0,n);}//强制将缓存区的数据进行输出outputStream.flush();//关流outputStream.close();in.close();}

controler层代码

@ApiOperation(value="系统文件在线预览接口")@PostMapping("/api/file/onlinePreview")publicvoidonlinePreview(@RequestParam("url")Stringurl,HttpServletResponseresponse)throwsException{fileService.onlinePreview(url,response);}

效果展示:

在线预览execl

往期推荐:这个系统被吹爆了,Nginx 可视化配置监控一条龙快速搞定!ChatGPT 详细介绍:原理、应用、如何试用,统统搞定!如何搭建一台永久运行的个人服务器?SpringBoot 实现动态配置及项目打包部署上线SpringBoot 调用外部接口的三种方式11.8K Star 数!超美观强的Nginx 可视化管理界面Spring Boot 操作 Redis 的各种实现

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。