这两天遇到一个大坑,客户要做office 文档在线预览功能,于是乎就要把office文档转换成pdf交给前端显示。
在某度找了一圈都说openOffice+jodconverter 可以搞定这个事情。代码倒是很好找,不过版本很多,各类jar包也很多,但尝试下来发现,转化效果很一般,复杂的excel也无法成功。有同事建议放到服务器上效果可能好些,于是就开始折腾在服务器上安装OpenOffice这个事情。网上各种找大神的博文,发现安装起来不是很顺畅,就写了这篇随笔,记录一下,遇到的问题,方便自己以后查看。
1.http://www.openoffice.org/zh-cn/download/ 去官网链接下载linux版本的openOffice 以4.1.5 版本为例。
2.将压缩包上传至服务器上,并进行解压安装。
1 tar -zxvf 对应的压缩包名字
2 cd 进入解压后的 /zh-cn/RPMS
3 yum localinstall *.rpm
4 cd desktop-integration
5 rpm -ivh openoffice4.1.5-redhat-menus-4.1.5-9789.noarch.rpm
默认会安装在/opt目录下。
3.启动服务
1 /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 临时启动
2 nohup /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard & 后台启动
端口号根据自己项目实际来确定。
后台启动会一直占用内存,据各路大神说 大概100M,我自己没测过具体值不清楚。
有的程序是需要预先启动openOffice 服务的,有的则在代码里自己启动服务。
4.查看进程
netstat -lnp |grep 端口号
大概显示成这样就算启动完了。
tcp 0 0 127.0.0.1:8100 0.0.0.0:* LISTEN 14362
/soffice.bin
1.装完临时启动看下,可能会报错:
error while loading shared libraries: libXext.so.6: cannot open shared object file: No such file or directory
执行命令:yum -y install libXext
2.装完openoffice后启动服务可能会报错:
no suitable windowing system found, exiting
从字面上的意思就是缺少一个窗口化的系统
执行命令:yum groupinstall
"X Window System"
1. /usr/java/jdk1.8.0_91/jre/lib/fonts下新建路径:fallback
$ cd $JAVA_HOME/jre/lib/fonts/
$ mkdir fallback
2. 上传字体到fallback文件夹
将字体:simhei.ttf 黑体、simsun.ttc 宋体(windows下找下)
上传至$JAVA_HOME/jre/lib/fonts/fallback路径下。
$ cat /etc/fonts/fonts.conf
/usr/share/fonts /usr/share/X11/fonts/Type1 /usr/share/X11/fonts/TTF /usr/local/share/fonts ~/.fonts
4. 拷贝字体
将 /usr/java/jdk1.8.0_91/jre/lib/fonts的全部内容
拷贝到上一步查看的路径下, 如上一步我的字体路径为:/usr/share/fonts
5. 更新缓存
执行 fc-cache
6. 杀掉openoffice进程
$ ps -ef | grep openoffice
root 14385 14366 0 15:27 pts/0 00:00:00 /opt/openoffice4/program/soffice.bin -headless -accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizard
root 22031 2327 0 16:34 pts/0 00:00:00 grep openoffice
$ kill -9 14385
7. 重启后台运行openoffice
$ soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &