SpringBoot集成OpenOffice部署到docker(windows和linux)

目标:最近遇到一个实现文件预览功能,利用了openoffice把文件转成html格式返回给前端
openoffice安装
地址:http://www.openoffice.org/download/index.html(下载偏慢,csdn有币大佬可以去上面找找资源。很快,很贵)

windows:
1.下载了直接一直下一步安装就好,推荐默认路径,否则需要配置(后面会提到)

linux:
1.推荐压缩包放到/opt目录下

2.解压:tar -zxvf Apache_OpenOffice_4.1.6_Linux_x86-64_install-rpm_zh-CN.tar.gz

     

3.移动到安装目录:cd zh-CN/RPMS
4.安装:rpm -ivh openoffice4.1.3-redhat-menus-4.1.3-9783.noarch.rpm
5.移动到程序目录:cd /opt/openoffice4/program
6.启动服务:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

7.查看启动状态:ps -ef|grep soffice

     

 

 

  至此,openoffice我们安装完成。

 

 SpringBoot开发
 1.添加依赖

    

 

   2.编写代码

   

 

 

 

    系统会自动装配DocumentConverter,我们可以直接使用。convert和to方法支持流也支持文件,两个as方法是作为该流或文件作为什么类型转成什么类型。

   

    3.添加配置

   

  前面3个配置项显而易见也没什么大问题,后两个容易出现一些问题:

 

  问题1:抛出异常IllegalStateException:officeHome not set and could not be auto-detected

  第一种情况:office-home其实是可以不填的,系统会默认一些路径。如果没有安装在系统指定路径并且没有配置office-home会抛出这个异常。

  默认路径存储在jar包中org.jodconverter.office.LocalOfficeUtils文件下,可以自行查阅。如果没有安装在这下面像我一样指定。

  第二种情况:项目本地没有问题,部署在docker中突然出现这个错误。熟悉docker的朋友应该知道程序获取路径获取的其实是docker容器的路径,

  所以需要在运行docker容器的时候添加挂载目录。例:docker run ... -v opt/openoffice4:/opt/openoffice4 ... 

 

  问题2:抛出异常IllegalArgumentException: URL seems to be an unsupported

  第一种情况:查看当前文件格式是否被支持。支持类型存储在org.jodconverter.document.DefaultDocumentFormatRegistry类中,自己去查看是

  否支持自己的类型转换。

  第二种情况:其实还有一种情况也会抛出这个异常,就是程序在转换文件类型时会生成中间临时文件,如果找不到也会出现这个异常。我在配置

  文件中配置的working-dir就是指定中间临时文件的存储路径。默认不填是没有问题,系统生成然后程序自己去找。而程序部署在docker中就会出现

  系统生成在服务器目录下,程序在docker容器目录下找的尴尬问题。因为我们之前上一步启动docker挂载了opt目录,所以干脆在opt目录下新建文

  件夹配置上就ok了。如果不是docker挂载问题也可以考虑是不是其他类似情况。

   

  至此,我们部署在docker的程序已经可以再linux实现文件类型转换啦。有问题可以下方评论。

   

 

posted @ 2020-04-01 13:10  老贾老贾  阅读(3480)  评论(0编辑  收藏  举报