使用OpenOffice在线预览文档

开发中遇到了一个需求,需要在线预览word文档,excel表格,pdf等等文件,于是经过一圈Google,发现了这个工具,openoffice会把文档转为pdf文件再打开,话不多说,直接上代码

百度下载OpenOffice,打开服务即可,这里不做过多解释

导入依赖

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

OpenOfficeUtil工具类

import com.artofsolving.jodconverter.BasicDocumentFormatRegistry;
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;/*** @program: hongjiesuan-service-image* @description: openOffice工具类* @author: jiachaoyang* @create: 2022-05-27 11:21**/
public class OpenOfficeUtil {/** 默认转换后文件后缀 */private static final String DEFAULT_SUFFIX = "pdf";/** openoffice_port */private static final Integer OPENOFFICE_PORT = 8100;/*** @Description office文档转换为PDF(处理本地文件)* @Params [sourcePath 文件路径, suffix 文件后缀名]* @Return InputStream* @Author Mr.Jia* @Date 2022/5/27 11:21*/public static InputStream convertLocaleFile(String sourcePath, String suffix) throws Exception {File inputFile = new File(sourcePath);InputStream inputStream = new FileInputStream(inputFile);return covertCommonByStream(inputStream, suffix);}/*** @Description office文档转换为PDF(处理网络文件)* @Params [netFileUrl, suffix]* @Return InputStream* @Author Mr.Jia* @Date 2022/5/27 11:21*/public static InputStream convertNetFile(String netFileUrl, String suffix) throws Exception {// 创建URLURL url = new URL(netFileUrl);// 试图连接并取得返回状态码URLConnection urlconn = url.openConnection();try{urlconn.connect();System.out.println("连接成功");InputStream inputStream = urlconn.getInputStream();if (inputStream == null){System.out.println("--------- input stream is null");return null;}HttpURLConnection httpconn = (HttpURLConnection) urlconn;int httpResult = httpconn.getResponseCode();if (httpResult == HttpURLConnection.HTTP_OK) {return covertCommonByStream(inputStream, suffix);}}catch (Exception e){System.out.println("连接失败");}return null;}/*** @Description 将文件以流的形式转换* @Params [inputStream, suffix]* @Return InputStream* @Author Mr.Jia* @Date 2022/5/27 11:21*/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);BasicDocumentFormatRegistry 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);}/*** @Description outputStream转inputStream* @Params [out]* @Return ByteArrayInputStream* @Author Mr.Jia* @Date 2022/5/27 11:21*/public static ByteArrayInputStream outputStreamConvertInputStream(final OutputStream out) throws Exception {ByteArrayOutputStream baos=(ByteArrayOutputStream) out;return new ByteArrayInputStream(baos.toByteArray());}
}

只需要调用convertLocaleFile方法或者convertNetFile即可

但是OpenOffice不支持docx和xlsx和pptx等扩展的文件(暂时还没搞清楚是不是版本的问题),需要重写getFormatByFileExtension,让OpenOffice把docx等文件按照doc这种形式转换

package com.artofsolving.jodconverter;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class BasicDocumentFormatRegistry  implements DocumentFormatRegistry{private List documentFormats = new ArrayList();public void addDocumentFormat(DocumentFormat documentFormat) {documentFormats.add(documentFormat);}protected List/* <DocumentFormat> */ getDocumentFormats() {return documentFormats;}/*** 重写openOffice的方法,将后缀名重新赋值* @param extension* @return*/@Overridepublic DocumentFormat getFormatByFileExtension(String extension) {if (extension == null) {return null;}//转化文件后缀名if (extension.contains("docx")) {extension = "doc";}if (extension.contains("pptx")) {extension = "ppt";}if (extension.contains("xlsx")) {extension = "xls";}String lowerExtension = extension.toLowerCase();for (Iterator it = documentFormats.iterator(); it.hasNext(); ) {DocumentFormat format = (DocumentFormat) it.next();if (format.getFileExtension().equals(lowerExtension)) {return format;}}return null;}@Overridepublic DocumentFormat getFormatByMimeType(String mimeType) {for (Iterator it = documentFormats.iterator(); it.hasNext(); ) {DocumentFormat format = (DocumentFormat) it.next();if (format.getMimeType().equals(mimeType)) {return format;}}return null;}
}

注:最好新建一个包路径跟openoffice一样的路径

这是我的路径

OpenOffice在线预览文档相关推荐

  1. java实现openoffice在线预览文档

    1.openoffice需要导入的jar包 jodconverter-core-3.0-beta-4.jar juh-3.2.1.jar jurt-3.2.1.jar ridl-3.2.1.jar u ...

  2. 前端页面预览word_前端实现在线预览文档

    前端实现在线预览文档 发布时间:2019-06-03 17:22, 浏览次数:529 <>前端实现在线预览文档 最近项目开发中需要实现在线预览Word,Excel,PowerPoint格式 ...

  3. 在线预览文档 Office Online

    前言 一直想学习做个在线预览文档的功能,今天使用Office Online Server 2016进行实现在线预览功能. 服务器版本选择:Office Online Server 2016搭配wind ...

  4. nopi word to html,C# 基于NPOI+Office COM组件 实现20行代码在线预览文档(word,excel,pdf,txt,png)...

    由于项目需要,需要一个在线预览office的功能,小编一开始使用的是微软提供的方法,简单快捷,但是不符合小编开发需求, 就另外用了:将文件转换成html文件然后预览html文件的方法.对微软提供的方法 ...

  5. 【板栗糖GIS】怎么将网络上只能在线预览文档另存为pdf(插件篇)

    怎么将网络上只能在线预览文档另存为pdf(插件篇) 目录 1.使用插件,这里推荐FireShot,好用免费 2.安装该插件的方式 3.打开在线预览文档的网址 4.点击插件-截取整个页面并且-另存为pd ...

  6. PHP 在线预览文档

    PHP 在线预览word.excel.ppt.pdf.txt等文档文件. PHP 在线预览文档 写代码比较少的方案. // PDF.text可以直接网页打开查看 // word.excel.ppt 文 ...

  7. 前端实现在线预览文档

    前端实现在线预览文档 最近项目开发中需要实现在线预览Word,Excel,PowerPoint格式的文档,网上查找了很多资源,各说纷纭,但是在一一尝试之后只有使用微软的预览接口才能成功,其他的会出现各 ...

  8. html怎么转换到百度,类似百度文库在线预览文档flash版(支持word、excel、ppt、pdf)+在线预览文档html版...

    类似百度文库在线预览文档flash版(支持word.excel.ppt.pdf)+在线预览文档html版 (1).将文档转换为html,只支持支持office文档 (2).将文档转换为flash,实现 ...

  9. 【ABAP】在线预览文档对象的开发实现

    应用场景:有些定制化开发(报表/功能增强等)完成之后,客户需要将其操作手册或者相关文档放在某个报表的初始画面,供实际操作者在线查阅,当然这个功能也同样类似于模板的下载,这里就以在线预览(直接打开)为例 ...

最新文章

  1. 一位Java大牛的BAT面试心得与经验总结,挥泪整理面经
  2. PHP的htmlspecialchars、strip_tags、addslashes解释
  3. 数据与智能武装营销飞轮,网易探索C2B时代营销新玩法
  4. Java程序创建Kafka Topic,以及数据生产消费,常用的命令
  5. 21朵水仙花算法java,柏拉图说,如果你有两块面包,你应当用一块去换一朵水仙花。。。。。...
  6. varnish 高性能方向代理服务器
  7. _bzoj1007 [HNOI2008]水平可见直线【单调栈】
  8. 学java后学python,宁波学习java还是python(孩子学Python怎么样)
  9. php扩展开发2--添加类
  10. hive select 语句
  11. autocad2013安装闪退_Win10系统打开AutoCad闪退的两种修复方法
  12. gitter 卸载_最佳Gitter频道:数学
  13. pdf转json_如何显著缩小PDF文件大小?
  14. Android模拟器的ip获取以及模拟器之间socket通信
  15. 偏导,梯度,Hesse矩阵的一些概念和求函数的极值
  16. 前端Html的全新认识
  17. 对英国房屋价格建模并预测 ---《量化金融R语言初级教程》
  18. 钟南山腾讯团队用ML算法验证:这三种防疫措施效果最显著,严格防控要趁早,7至14天起效...
  19. uiq3.0sdk最终版模拟器显示中文
  20. Desktop Central 应用规范报告—如何利用BYOD(一)

热门文章

  1. 全备份、增量备份与差量备份
  2. 最新北风网人工智能(完整版)
  3. iOS 一个错误 Unable to find a specification for
  4. Java--如何创建目录或文件
  5. 那些年遇到的DB2大坑
  6. 一些提取api key的正则表达式
  7. 【STM32L系列】+NUCLEO-L011K4体验资料
  8. 速来接好运!工作2年获得阿里内推名额,历经阿里4面成功拿下offer!
  9. 李嘉诚的区块链应用投资哲学
  10. python+selenium爬虫,使用selenium爬取热门微博数据