PHP实现office文件转PDF功能

        之前因为业务需要接触过在线浏览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

后续添加水印功能待测试完成后再续写。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值