PHP实现word(office文件)转PDF的功能并添加水印

PHP实现word(office文件)转PDF的功能并添加水印
开发目的:用PHP实现在linux服务器上在线批量转换office文件成PDF文件,常应用于文件管理较多的后台管理系统。

技术选择:
【PHP+OpenOffice+FPDI+FPDF】
首先要明确这一点,PHP是可以处理文件,但是PHP并不具备直接将office文件转换为PDF。最终实现这一功能还得借助服务器上的相关软件。例如Microsoft Office,不过此软件只能安装在windows的服务器上。所幸还有另外一款自由软件也具备相关的功能,并且还是跨平台的,这就刚好能满足绝大多数以Linux作为服务器的开发者的需求。本文也以此为基础介绍解决办法。(在以windows的服务器上还可以用PHP的COM组件去实现)

实现思路:
用PHP的系统函数,调用linux的相关命令,启用openoffice将office文件转换为PDF文档,并用FPDI和FPDF给PDF文件加上水印。

具体操作步骤

1、在linux服务器上安装openoffice 参考文章

openoffice的下载地址

创建目录
[root@localhost /]# mkdir openoffice/

通过filezilla或xftp将下载的openoffice文件上传上去

解压

[root@localhost /]# tar -zxvf /root/openoffice/Apache_OpenOffice_(安装包名称)

进入解压生成的zh-CN文件夹并查看详情

[root@localhost /]# cd /zh-CN
[root@localhost zh-CN]# ls

会看到三个目录,licenses    readmes    RPMS

进入到RPMS目录中并查看
[root@localhost zh-CN]# cd RPMS/

执行安装命令

[root@localhost RPMS]#rpm -ivh *.rpm

到这一步就表示安装成功了(安装完成后安装的软件会在**/opt/**下面有一个openoffice4文件夹,得进入该文件夹下面的program才好执行相关的命令,当然这是对于新手而言)

2、启动程序需要安装JDK环境 参考文章

JDK的下载地址
注意:下载文件前先看清楚自己服务器的位数,不然下载了也无法使用!

在usr目录下面建立java安装目录

[root@localhost usr]# mkdir java

将jdk-8u60-linux-x64.tar.gz拷贝到java目录下

解压jdk到当前目录

[root@localhost java]# tar -zxvf jdk-8u60-linux-x64.tar.gz

编辑配置文件,配置环境变量
[root@localhost java]# vim /etc/profile

    添加如下内容:JAVA_HOME根据实际目录来
    JAVA_HOME=/usr/java/jdk1.8.0_60
    CLASSPATH=$JAVA_HOME/lib/
    PATH=$PATH:$JAVA_HOME/bin
    export PATH JAVA_HOME CLASSPATH

重启机器或执行命令:source /etc/profile(推荐)实在不好使时重启是最好的选择

 sudo shutdown -r now(重启)

查看java的安装情况

 java -version(最开始就得执行一遍该命令,确保系统没有安装java)

会得到如下信息:
java version “1.8.0_60”
Java™ SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot™ Client VM (build 25.60-b23, mixed mode)

3、再次启动openoffice看是否好使 参考文章

启动openoffice的命令

 [root@centos program]# ./soffice -headless -accept=”socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard &

注意:一定是在program文件夹下,注意soffice前面的相对路径

查看端口号8100是否启动成功

 [root@VM_13_100_centos program]# netstat -nlp

这里不出意外会出现一系列的报错信息 <- _ <- 常见的错误及处理办法见下 ↓

无java运行环境,以上第二点已经解决

出现下面的错误

/opt/openoffice4/program/soffice.bin: error while loading shared libraries: libXext.so.6: cannot open shared object file: No such file or directory

错误原因:在/opt/openoffice4/program/下缺少libXext.so.6文件,可以去/usr/lib64 或者 /usr/lib查看有没有这个文件,如果有可以copy到program目录中,如果没有再安装

  # yum install libXext.x86_64
 
  安装完成后在那两个目录中找到并复制到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 其余命令和上一个错误处理相同

出现错误 no suitable windowing system found, exiting.

错误原因:没有相关的windows窗口

 # yum groupinstall “X window System”

再次启动,应该是没有问题了,v(如果还是启动不了,先看是不是被防火墙限制了,记住,一定要重新启动系统!!!很重要!!!)

4、安装java的文件包管理工具jodconverter.2.2.2

在/usr目录下建立了一个wenku文件夹,当然这个是自定义的,可以放在任何位置,不过对于新手来说还是按照文档叙述来操作。避免入坑!将下载的zip文件放入wenku文件夹,用unzip命令解压。

转换文件的系统命令:

java -jar /usr/wenku/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar test.docx 1.pdf

test.doc为要转换文件的路径,1.pdf为输出文件路径

5、编写文件上传程序

然后编写文件上传程序(文件使用$_FILES接值,上传文件失败时很多原因都是服务器的文件夹权限问题),真正处理文件转换的时候得用到php的系统函数system,这里会有一个坑,默认的这种系统函数都是被禁止的,先通过phpinfo查询,然后解禁。另外如果调用系统函数失败,一方面可能是因为php的用户(www)的权限不够(很少),最关键的原因是用php的系统函数处理java指令的时候一定要用绝对路径!!!

p = “/usr/java/jdk1.7.0_80/bin/java -jar “. $jodconverter_path . ‘ ‘ . $source_dir . ‘ ‘ . $dist_dir;

exec($p, $log, $status);    

另外友情提醒一下刚上道的朋友,服务器上的文件名能不用中文就不要用中文,即使要上传中文名的文件至少也得做一下处理啊,文件编码真的坑不起的!唔~

大杉遇到过一次情况,前几位开发小哥哥直接将GBK的文件名传了上去,然后服务器是UTF-8的编码,用转换程序的时候一直提示失败,原因就是找不到文件。。。这种情况下可以在命令里面加 export LANG=en_US.UTF-8;

6、处理解决转换文件乱码的问题

对于用openoffice转换文件中文名乱码的问题可以参考这篇文章,这里就不再多做阐述了~ 主要手懒,改天有时间再加进来!

参考文章点击这里

7、用FPDI和FPDF给PDF文件加上水印

同样,手懒,改天再补充进来,有篇文章介绍的不错了。参考文章点击这里

原理:利用FPDI来加载已知的PDF文件,用FPDF对PDF文件进行加水印操作,如果处理失败,请查看相关文件夹的权限,是否具有可写权限!!!
 

    原文作者:青崖林夕
    原文地址: https://blog.csdn.net/u012757419/article/details/93771103
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞