CentOS、java环境、openoffice、jodConverter、php开发环境
1.安装java环境
a. jdk下载(我选的是jdk-8u211-linux-x64.tar.tar.gz)
b. 将压缩包移到指定目录(自定义)
$ mv jdk-8u211-linux-x64.tar.gz /usr/local/ 解压文件 $ tar -zxvf /usr/local/jdk-8u211-linux-x64.tar.gz
c.配置java环境变量
$ vim /etc/profile #在文件的最后添加如下内容 #Java Envexport JAVA_HOME=/usr/local/jdk1.8.0_211 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin #生效环境变量 $ source /etc/profile #测试java环境 $ java -versionjava # 结果如下 version "1.8.0_211" Java(TM) SE Runtime Environment (build 1.8.0_201-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
2.安装openoffice
a. OpenOffice(我选的是4.1.6)
b.解压安装包到指定目录 ,进入安装包所在目录 -C 解压目录 (PS :-C 大写不是小写)
# tar -zxvf Apache_OpenOffice_4.1.6_Linux_x86-64_install-rpm_zh-CN.tar.gz -C /data/soft/
c. 解压完成后会在安装目录下有一个zh-CN 进入RPMS目录下,运行安装yum localinstall *.rpm
# cd /data/soft/zh-CN/RPMS # yum localinstall *.rpm
d. 安装完成之后进入RPMS目录下的desktop-integration文件夹,安装openoffice4.1.6-redhat-menus-4.1.6-9790.noarch.rpm
# cd /RPMS/desktop-integration # yum localinstall openoffice4.1.6-redhat-menus-4.1.6-9790.noarch.rpm
e. 安装完成之后启动服务就行,安装软件会安装在/opt/openoffice4目录下,启动soffice服务
- 临时启动 -
# /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 & ****** 记得等一会出现#或者$在关闭窗口,不然服务起不来 *****
f. 查看服务启动状态
# netstat -lnp |grep 8100
# 如果出现下面的这种情况说明启动成功,后面步骤可忽略
tcp 0 0 127.0.0.1:8100 0.0.0.0:* LISTEN 13903/soffice.bin
# 如果没有成功看一下8100是否开放,如果已经开放那么在输入命令openoffice4
# openoffice4 # /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到/opt/openoffice4/program/目录里面,如果没有在安装
# yum install libXext.x86_64
# 安装完成后在那两个目录中找到复制到/opt/openoffice4/program/下,cp 复制命令
# cp -a usr/lib64/libXext.so.6 /opt/openoffice4/program/
# 拷贝完成后再输入openoffice4
# openoffice4 # /opt/openoffice4/program/soffice.bin: error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory
# 和上面一样找不到libfreetype.so.6文件,先去那两个目录找,没有在安装,我的是centos 7 的,看一下你对应的操作系统版本下载 https://pkgs.org/download/libfreetype.so.6,下面这个命令直接可以装上
# yum install freetype
# 再复制到
# cp -a usr/lib64/libfreetype.so.6 /opt/openoffice4/program/ # openoffice4 /** 再试一次 */ # no suitable windowing system found, exiting /** T_T真麻烦 */
# 报问题:no suitable windowing system found, exiting.
# yum groupinstall "X Window System"
# 安装完成之后,启动openoffice
# openoffice4 /** 终于没报错了^_^ */
# 看看服务起来没
# netstat -lnp |grep 8100 # tcp 0 0 127.0.0.1:8100 0.0.0.0:* LISTEN 13903/soffice.bin
# 好了,安装完成,我们可以使用openoffice的服务了
# 调错
[root@iZwz9cvxma7yo7ir62efpiZ /]# openoffice4 /opt/openoffice4/program/soffice.bin X11 error: Can't open display: Set DISPLAY environment variable, use -display option or check permissions of your X-Server (See "man X" resp. "man xhost" for details)
====> 如果出现这个报错,重启就好了
3.安装jodConverter
a. 进入opt目录,下载文件
# cd /opt # wget https://downloads.sourceforge.net/project/jodconverter/JODConverter/2.2.2/jodconverter-2.2.2.zip
b. 解压
# unzip /opt/jodconverter-2.2.2.zip
c. 进入目录
# cd jodconverter-2.2.2/lib
d. 测试转换
# java -jar jodconverter-cli-2.2.2.jar test.docx test.pdf
显示:
Sep 20, 2017 3:40:05 PM com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection connect
INFO: connected
Sep 20, 2017 3:40:06 PM com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection disposing
INFO: disconnected
查看,已经有了test.pdf,可以直接访问。到这里转换貌似没有问题,但如果文件中有中文,就会出现乱码,接下来解决字体问题。
4.加入中文字体,防止中文乱码
a.进入jdk字体目录
# cd/usr/local/jdk1.8.0_201/jre/lib/fonts/
b. 先将此文件夹下的字体问题,复制到系统字体目录中
# cp /usr/local/jdk1.8.0_201/jre/lib/fonts/* /usr/share/fonts/
ps: 如果拷贝的时候出现cp:omitting directory的错误,例如 cp:omitting directory “bbs” 说明bbs目录下面还有目录,不能直接拷贝
解决办法:
递归拷贝 命令:cp -r bbs ../backup/bbs 解释:-r 这个options是递归的意思
举一反三:
1. 删除的时候也可能出现这种下面有文件不能删除的问题 也用-r 级联删除
2. chmod赋予权限的时候想级联也可以用-R 注意是大写的R
ps: 如何查看你的系统中的字体库
[root@80ec6 fallback]# cat /etc/fonts/fonts.conf <!-- Font directory list --> <dir>/usr/share/fonts</dir> <dir>/usr/share/X11/fonts/Type1</dir> <dir>/usr/share/X11/fonts/TTF</dir> <dir>/usr/local/share/fonts</dir> <dir>~/.fonts</dir>
c. 在/usr/local/jdk1.8.0_201/jre/lib/fonts/目录下建立fallback目录
# mkdir fallback
d. 将中文字体msyh.ttf(微软雅黑)、msyhbd.ttf(微软雅黑粗体)、simhei.ttf(黑体)、simsun.ttc(宋体)放到/usr/local/jdk1.8.0_201/jre/lib/fonts/fallback目录下(可以在Windows字体库找,或者网上下载)
e. 将新添加的字体也复制到系统字体目录中
# cp /usr/local/jdk1.8.0_201/jre/lib/fonts/fallback/* /usr/share/fonts/
f. 刷新字体缓存
fc-cache
g. kill掉openoffice进程
[root@80ec6 fonts]# ps -ef | grep openoffice root 3045 3031 0 06:19 pts/1 00:00:03 /opt/openoffice4/program/soffice.bin -headless -accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizard 执行kill: [root@80ec6 fonts]# kill -9 3045
h. 重启后台运行openoffice
# soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
i. 再次测试文件中带有中文字符的文件
# java -jar /opt/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar /opt/test.ppt /opt/test.pdf
5. php调用
a. 修改php.ini文件,因为需要使用到禁用的函数disable_function 中的 exec(),将disable_function中的exec 删除
b. 需要java的绝对路径
c. 执行代码
<?php $command = "/usr/local/jdk1.8.0_201/bin/java -jar /opt/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar /tmp/test.docx /tmp/test.pdf"; // $return_var返回值0或1,如果返回0则执行成功,返回1则执行失败 exec($command, $output, $return_var); if ($return_var != 0) { throw new \Exception("生成PDF失败"); }
d. 到这里应该转换成功了!由于网上的参考比较乱,所以自己写下这边博文留作自己备忘。
===> 注意:此方式强烈不推荐,最好不要在生产线上环境使用!!!!
ps: 执行此文件时,假如出现了由于权限的问题而造成的转换失败,可以尝试使用sudo强制执行命令,但是使用sudo会出现没有权限的问题,往下看
$command = "sudo /usr/local/jdk1.8.0_201/bin/java -jar /opt/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar /tmp/test.docx /tmp/test.pdf";
1. 先查看启动你php的进程的用户是谁,可以通过在命令行执行:ps -ef | grep php 来查看,或者在php中执行 echo exec('whoami') 来查看
<?php echo exec("whoami");
2. 由于我使用的是宝塔环境,所以是www用户,那么如果我想让www拥有sudo的权限,我采用的方式将root的所有权限赋予www和www用户组(此方式不推荐,非常不安全,但目前没有想到更合适的方式既能获得权限,又较为安全)
# visudo /** 执行命令,修改sudo的配置文件,找到下面的地方进行添加 */ ## Allow root to run any commands anywhere root ALL=(ALL) ALL www ALL=(ALL) ALL //新添加这一行 %www ALL=(ALL) NOPASSWD: ALL //设置www组下面的用户使用sudo不需要输入密码
# 如果你希望修改启动你php进程的用户
此时先自己添加一个用户和组。 /usr/sbin/groupadd xxxx /usr/sbin/useradd -g xxxx -s /bin/bash xxxx 加完用户后、vim /etc/passwd 里面就可以看到你添加的用户了。
# 修改php启动用户为您刚添加的用户
找到你得php安装的地方的php-fpm.conf 。打开配置文件、编辑里面的 user = xxxx; group = xxxx; (xxxx为您刚才添加的用户) 重启php-fpm(service php-fpm restart) 重复上面查看php启动进程的用户、应该已经变了。
# 最后再将刚才添加的用户xxxx到sudoers里面,步骤参照上面的第2步
===> 注意:此方式强烈不推荐,最好不要在生产线上环境使用!!!!