- 背景:
公司产品有文档转pdf的需求,但是centos7下面默认的是python2.7,在网上找了很多教程,都不太理想,于是自己琢磨了一下,发现LibreOffice自带的python环境刚刚好,但是没有LibreOffice的侦听器模式unoserver,而且这个python环境没有自带pip工具,于是便有了这篇随笔
笔记:
我是在centos的docker里面操作的,直接在宿主机也一样
[root@e31ee41ba5f0 /]# yum -y install wget
[root@e31ee41ba5f0 /]# cd /opt
[root@e31ee41ba5f0 opt]# wget https://www.libreoffice.org/donate/dl/rpm-x86_64/7.6.7/zh-CN/LibreOffice_7.6.7_Linux_x86-64_rpm.tar.gz
下载LibreOffice的rpm安装包
[root@e31ee41ba5f0 opt]# tar -xf LibreOffice_7.6.7_Linux_x86-64_rpm.tar.gz
[root@e31ee41ba5f0 RPMS]# cd LibreOffice_7.6.7.2_Linux_x86-64_rpm/RPMS/
[root@e31ee41ba5f0 RPMS]# ls
[root@e31ee41ba5f0 RPMS]# yum -y install ./*.rpm
修改一下快捷命令的名称
[root@e31ee41ba5f0 RPMS]# mv /bin/libreoffice7.6 /bin/libreoffice
[root@e31ee41ba5f0 RPMS]# libreoffice
执行libreoffice命令有报错,需要使用yum安装libXinerama
[root@e31ee41ba5f0 RPMS]# yum -y install libXinerama
安装完以后,再次执行
[root@e31ee41ba5f0 RPMS]# libreoffice
缺少cairo库,继续使用yum安装
[root@e31ee41ba5f0 RPMS]# yum -y install cairo
安装完成以后,再次执行libreoffice命令
[root@e31ee41ba5f0 RPMS]# libreoffice
继续安装缺少的库:cups-libs,安装完成以后,再次执行libreoffice命令
[root@e31ee41ba5f0 RPMS]# yum -y install cups-libs
[root@e31ee41ba5f0 RPMS]# libreoffice
解决了libreoffice命令的执行报错以后,
进入program目录,安装pip命令
[root@e31ee41ba5f0 RPMS]# cd /opt/libreoffice7.6/program
[root@e31ee41ba5f0 program]# wget https://bootstrap.pypa.io/get-pip.py
[root@e31ee41ba5f0 program]# ./python get-pip.py
安装unoserver
[root@e31ee41ba5f0 program]# ./python -m pip install unoserver
安装好的python包都在program/python-core-3.8.19/bin目录下面
但是直接使用会报错:
因为没有配置相关的环境变量,所以在不破坏centos原有的python环境的情况下,使用LibreOffice自带的python通过os模块调用shell执行,就能完美解决这个问题
备注:
为了方便直接执行unoserver命令,写了一个py文件,命名为unoserver,并且直接放到了/usr/bin目录下
#!/opt/libreoffice7.6/program/python
import os
os.system("nohup /opt/libreoffice7.6/program/python-core-3.8.19/bin/unoserver >/log/uno.log &")
同理unoconvert也写了一个py文件,命名为unoconvert放到了/usr/bin目录下
#!/opt/libreoffice7.6/program/python
import os
import sys
args = " ".join(sys.argv[1:]) # 将参数列表转换为空格分隔的字符串
command = f"/opt/libreoffice7.6/program/python-core-3.8.19/bin/unoconvert {args}"
os.system(command)
清理一下垃圾文件
[root@e31ee41ba5f0 program]# rm -rf /opt/LibreOffice_7.6.7.2_Linux_x86-64_rpm /opt/LibreOffice_7.6.7_Linux_x86-64_rpm.tar.gz