前言
目前java语言能做的word转pdf都是通过poi或itext+pdfwriter,先把word转换成html,再通过模版去写出pdf,我们开头也是这样,但是随着文件多种类,开始存在转换文字和图片缺失的情况,经调查是字节码丢失导致的,最后也是网上搜罗了一大堆,除了第三方也没有什么更好的方式,最后看到了openOffice服务,但都是win平台才能使用的,索性在linux上看看能不能搞出来,最后记录下方案,希望能帮到有此业务的朋友
安装
下载源码包
wget http://heanet.dl.sourceforge.net/project/openofficeorg.mirror/4.0.0/binaries/zh-CN/Apache_OpenOffice_4.0.0_Linux_x86-64_install-rpm_zh-CN.tar.gz
解压文件
tar -zxvf Apache_OpenOffice_4.0.0_Linux_x86-64_install-rpm_zh-CN.tar.gz
解压后会在当前目录生成一个zh-CN目录
cd/zh-CN/PRMS/
安装当前目录组件
yum localinstall *.rpm
装完会在当前目录生成一个desktop-integration目录
cd desktop-integration
yum localinstall openoffice4.1.5-redhat-menus-4.1.5-9789.noarch.rpm
启动(必须在openoffice的安装目录下,如/opt/openoffice4下执行)
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
问题
报错(/opt/openoffice4/program/soffice.bin: error while loading shared libraries: libXext.so.6: cannot open shared object file: No such file or directory
)
安装
yum install libXext.x86_64
安装完后在那两个目录中找到复制到/opt/openoffice4/program/下
cp -a usr/lib64/libXext.so.6 /opt/openoffice4/program/
报错
/opt/openoffice4/program/soffice.bin: error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory
yum install freetype
cp -a usr/lib64/libfreetype.so.6 /opt/openoffice4/program/
报错
no suitable windowing system found, exiting.
yum groupinstall "X Window System"
使用
- 在github上克隆项目
git clone https://github.com.dagwieers/unconv
- 进入unoconv目录并安装 make install
- 使用命令unoconv -f pdf xx.docx
代码整合
注意在调用服务之前请把之前启动的office服务给杀掉,我们不从linux手动执行命令,完全交给job程序来操作,否则报如下错误
错误.png
一切运维搞定后,就大功告成了
成功.png
我们指定的路径下会出现转换后的pdf文件
文件.png
打开来看看,嗯 没什么问题 完美!
打开.png
总结: java + linux 还是不适合做这种桌面级的服务,实在是太麻烦了,有钱的直接买第三方吧 哈哈









网友评论