OpenOffice在线预览附件

本文介绍了如何实现OpenOffice在线预览附件功能,包括在Windows和Linux上安装OpenOffice,引入jodconverter-2.2.2.jar包,解决前端和后端代码中的问题,以及处理文件转换和预览。
摘要由CSDN通过智能技术生成

OpenOffice在线预览附件

Author xiuhong.chen@hand-china.com

Date 2018/1/20

Desc 在线预览附件功能

1.下载安装包

官方下载: http://www.openoffice.org/download/index.html

image.png

2.安装OpenOffice

此处对于安装过程针对windows 和 linux两种环境分别介绍:

Windows安装
  • 双击安装包 打开运行程序 ----> 点击下一步按钮 ----> 点击浏览按钮 选择安装目录路径 -----> 会自动检测系统中的插件 如果需要会自动安装 -----> 输入使用的用户 以及选择用户权限 点击下一步按钮 -----> 勾选通常安装 点击下一步 ----> 点击完成 即安装结束

  • 接下来以命令方式启动OpenOffice服务

    cd  C:\Program Files (x86)\OpenOffice 4\program
    soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
    

服务打开成功之后在任务管理器可以看见soffice.bin的进程。

注意: 使用OpenOffice的时候一定要打开服务 !

比如我自己电脑晚上关机了,服务就自己关闭, 使用预览功能时候会报错:
java.net.ConnectException: connection failed: socket,host=127.0.0.1,port=8100,tcpNoDelay=1: java.net.ConnectException: Connection refused: connect at .....
Linux安装

linux安装教程可以参考网址:https://www.cnblogs.com/goodcheap/p/7929986.html

  • 启动服务和windows不同的是,需要在命令末尾加 &

    cd /opt/openoffice4/program
    soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
    
  • 查看服务是否成功启动

    [root@vs058 program]# ps -ef|grep openoffice
    root     24818 24804 19 15:08 pts/4    00:00:00 /opt/openoffice4/program/soffice.bin -headless -accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizard
    root     24824 24592  0 15:08 pts/4    00:00:00 grep openoffice
    
    [root@vs058 program]# netstat -lnp |grep 8100
    tcp        0      0 127.0.0.1:8100              0.0.0.0:*                   LISTEN      24818/soffice.bin   
    

3.引入jodconverter-2.2.2.jar包

引入jar包的过程摸索了很久, 对于一般的java项目,直接将jar包放在lib下就可以调用; 但是恰巧我用的是maven项目, 这就需要在maven中寻找依赖, 对于我这个maven新手而言,只听过maven,见过表面的maven,并没有很深入而又熟练地掌握它的用法,尤其是碰到在pom.xml中引入依赖这种问题. 只能很羞愧地寻求小伙伴的帮助或者百度.

  • 在国内访问Maven仓库,连接速度太慢,所以我们要将中央仓库换成阿里云的中央仓库:

    http://blog.csdn.net/xiaolyuh123/article/details/74091268

  • 某些项目需要公司内部的依赖,这个时候我们就可以在项目的pom.xml中手动指定公司的仓库,比如下图,前提是公司仓库里有我们需要的依赖

    image.png

  • pom.xml中引入 jar包请参考:http://blog.csdn.net/gfd54gd5f46/article/details/54973954 .

    比如我们这个在线预览的功能需要 jodconverter-2.2.2.jar , 阿里的中央仓库里并没有这个包, 我们就需要从万能的百度下载该包,然后上传到我们公司的中央仓库:https://jingyan.baidu.com/article/a948d6517b72eb0a2dcd2e2a.html , 上传之后我们的仓库里就有该依赖了 ! 如下图:

    image.png

  • 仓库中的依赖已经准备好,接下来我们就在pom.xml中引入依赖:

    image.png

    <!-- 注意: jodconverter-2.2.1 不能转换docx  xlsx  pptx格式的文件.
    
    jodconverter-2.2.2  和 jodconverter-core-3.0-beta-4 都可以导入docx格式的文件, 二者可选其一, 不过使用这两个jar包的时候还需要导入下边这些依赖包: 
    slf4j-api-1.7.25 , juh-4.1.2 , jurt-4.1.2 , ridl-4.1.2 , unoil-4.1.2 , xstream-1.4.10
    否则会报错: java.lang.NoClassDefFoundError: com/sun/star/lang/DisposedException -->
    
    <!--OpenOffice将docx  excel ppt 转换为pdf,实现在线预览-->
    
      		<dependency>
      			<groupId>com.hand.hap</groupId>
      			<artifactId>jodconverter</artifactId>
      			<version>2.2.2</version>
      		</dependency>
    
      		<dependency>
      			<groupId>org.slf4j</groupId>
      			<artifactId>slf4j-api</artifactId>
      			<version>1.7.25</version>
      		</dependency>
    
      		<dependency>
      			<groupId>org.openoffice</groupId>
      			<artifactId>juh</artifactId>
      			<version>4.1.2</version>
      		</dependency>
    
      		<dependency>
      			<groupId>org.openoffice</groupId>
      			<artifactId>jurt</artifactId>
      			<version>4.1.2</version>
      		</dependency>
    
      		<dependency>
      			<groupId>org.openoffice</groupId>
      			<artifactId>ridl</artifactId>
      			<version>4.1.2</version>
      		</dependency>
    
      		<dependency>
      			<groupId>org.openoffice</groupId>
      			<artifactId>unoil</artifactId>
      			<version>4.1.2</version>
      		</dependency>
    
      		<dependency>
      			<groupId>com.thoughtworks.xstream</groupId>
      			<artifactId>xstream</artifactId>
      			<version>1.4.10</version>
      		</dependency>
    
      		<!--openOffice-->
    
备注:

有小伙伴说很难找到jar包,我把jar包上传到了百度云盘里,大家根据项目选择不同的版本
链接:https://pan.baidu.com/s/16ujGhvEC4v1ucjkGwpCz7g
提取码:dgsm

4.前台代码

在附件上传界面可以上传文件,也可以获取到文件列表的详细信息, 比如 文件在服务器上的路径,还有文件名称

image.png

image.png

既然文件路径都获得到了, 那我们直接将文件路径和文件名称传递到后台进行预览, 代码如下:


kendoUI-Grid:

{
	field: "",
  headerAttributes: {
    style: "text-align: center"
  },
  attributes: {style: "text-align:center"},
  title: '预览',
  width: 50,
  template: function (e) {
      return '<a href="##" onclick="preview( \''+e.filePath.replace(/\\/g,"/")+'\' ,  \''+e.fileName+'\')"  style="text-decoration : underline;color : blue;cursor:pointer" >'
        + '预览'
        + '</a>'
    }
}

将参数传递到controller: 
function preview(filePath , fileName) {
 window.open("${base.contextPath}/sys/attach/preview?filePath="+filePath+"&fileName="+fileName);
          }

注意:

  • 传递非字符串时:"+item.basicId+"
  • 传递字符串参数时: \""+item.candidateRuleCode+"\" 用双引号将参数包围,同时使用转义符。
  • 传递文件路径作为参数时: 文件路径中包括"/" 或者 "\" , 只用双引号将参数包围会出错:Uncaught SyntaxError: Invalid Unicode escape sequence , 所以我们用 .replace(/\\/g,"/") 将路径中的参数全部用转义字符
5.后台代码
  • 首先我们要根据System.getProperty("os.name")获得服务器类别, 然后自由转换文件路径, 比如linux就是``"/",windows就是""`

  • 对于HAP框架来说, 文件上传到服务器时是不带后缀名的,这个时候利用jodconverter将docx文件转换为pdf文件时就会出现错误java.lang.IllegalArgumentException: unknown document format for file:

  • 14
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值