之前因为业务需要接触过在线浏览office文件,用过一些接口,例如:I DOC View(收费)、Office Web 365(有免费版,详情可点击查看)、online doc(有免费版,详情可点击查看)、微软的Office Online等,但是都有限制。其中微软的Office Online(https://view.officeapps.live.com/op/view.aspx?src=文件地址)是最合适的,但是这个文件地址必须使用域名访问,且访问端口为80,如果要在内网使用,就很麻烦,之后就放弃了,今天看一篇php实现在线预览word等office文件,同时添加水印觉得有点意思就试着整了一下,初步看了还可以,将office文件转换为PDF文件进行在线预览。
- 服务器:Linux centos7.5
- 安装环境:OpenOffice、java、jodconverter
- 下载fpdf、fpdi库,使用其中的API实现给pdf文件添加水印(暂未实现)
- 将添加水印后的pdf文件在网页上显示出来(暂未实现)
一、安装Apache OpenOffice
Apache OpenOffice依赖于JDK,安装JDK可以参照:CentOS安装JDK
1、下载
根据自己的系统下载Apache OpenOffice
wget https://sourceforge.net/projects/openofficeorg.mirror/files/4.1.9/source/apache-openoffice-4.1.9-561082130a-src.tar.gz/download # 下载贼慢
2、解压
进入到Apache_OpenOffice_4.1.9_Linux_x86-64_install-rpm_zh-CN.tar.gz所在目录,执行如下命令:
tar -zxvf Apache_OpenOffice_4.1.9_Linux_x86-64_install-rpm_zh-CN.tar.gz
解压后会看到当前目录下多了一个"zh-CN"文件夹,切换进入该文件夹中的"RPMS"目录,使用以下命令安装OpenOffice:
rpm -ivh *.rpm
安装成功后就可以启动OpenOffice服务了
3、启动与关闭
/opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard #临时启动
/opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard & #后台启动
nohup /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard & #永久启动
netstat -lnp|grep 8100 #查看是否启动成功
ps -ef|grep soffice #查看PID
kill xxxx #关闭 kill服务的PID
二、安装JODConverter
JODConverter是一种Java OpenDocument转换器,能够转换不同格式的文档,它依赖于Apache OpenOffice或 LibreOffice ,它为OpenDocument和Microsoft Office提供了最好的免费导入/导出的过滤器。
使用jodconverter调用openoffice来实现office文件转pdf,这个方法对于linux下的php比较方便。
- 下载后上传到Linux服务器解压,然后切换到jodconverter的lib目录下,使用以下命令测试Word转PDF:
java -jar jodconverter-cli-2.2.2.jar test.docx test.pdf
- 如果成功将word文档转成pdf文档,则表示你的openoffice和jodconver都已经安装成功了。(该命令默认test.docx也在lib目录下)
当然你也可以不用切换到lib目录,使用以下命令也能实现转换:
java -jar 'jar包地址' '源文件地址' '输出文件地址'
- 转换完成后查看一下pdf文件内容,看看是否中文出现乱码或者显示不出,若存在该情况,还需要进行下面这一步:
将windows系统的c:\window\fonts
目录下的字体上传到linux服务器的 usr\share\fonts
目录下,一般都是这个目录,可以用 cat /etc/fonts/fonts.conf
确认一下。
上传完成后,使用命令 fc-cache -fv
更新缓存,然后重启openoffice服务,重新尝试文档转换。
三、尝试使用PHP实现文档转换
- 如果执行中遇到php无法执行exec()函数的问题,需要修改php.ini里的配置(删除 disable_function 中 exec )
后续添加水印功能待测试完成后再续写。