2024-01-04
服务器
libreoffice7.5
735
一、安装 libreoffice
1.wget 安装(推荐)
yum list installed | grep libreoffice
yum remove libreoffice*
# 报错:/opt/libreoffice7.5/program/soffice.bin: error while loading shared libraries: libcairo.so.2...
yum install -y cairo cups-libs libSM libXinerama
cd /usr/local/download
wget http://mirrors.cloud.tencent.com/libreoffice/libreoffice/stable/7.5.2/rpm/x86_64/LibreOffice_7.5.2_Linux_x86-64_rpm.tar.gz
tar -axvf LibreOffice_7.5.2_Linux_x86-64_rpm.tar.gz
cd LibreOffice_7.5.2.2_Linux_x86-64_rpm/RPMS/
yum -y localinstall *.rpm
yum install -y libXinerama cups-libs dbus-glib cairo libSM
# 创建软链接
ln -s /usr/bin/libreoffice7.5 /usr/bin/libreoffice # ln -s 源文件 目标文件
# 检测版本
libreoffice --version
libreoffice7.5 --version
2.转换命令
libreoffice --help
# .doc 格式转 .docx 格式
libreoffice --headless --convert-to docx /www/docx/xxx.doc --outdir /www/docx/
# .docx 格式转 .pdf 格式
libreoffice --headless --convert-to pdf /www/docx/xxx.docx --outdir /www/pdf/
3.word 转 pdf 中文乱码
yum groupinstall "fonts"
vim /etc/locale.conf
LANG="zh_CN.UTF-8" # 将内容 en_US 改为 zh_CN
source /etc/locale.conf
4.修改默认字体
cd /usr/share/fonts/
mkdir upload-fonts
chmod -R 777 upload-fonts # 将字体上传到该目录
fc-cache -fv # 更新字体缓存
fc-cache -fv /usr/share/fonts/upload-fonts # 更新指定目录
二、设置权限
1.用户组、用户
# 添加用户组、用户,如果已安装 nginx,则不用设置
groupadd nginx
useradd -g nginx -s /bin/bash
cat /etc/passwd # 查看文件
# 删除用户、用户组
userdel nginx
groupdel nginx
2.修改 php-fpm 文件
find / -name php-fpm.conf
vim /usr/local/software/php8.1/etc/php-fpm.conf # 找到最后一行
vim /usr/local/software/php8.1/etc/php-fpm.d/www.conf # 修改此文件
# 修改 www.conf 中 user, group 值 ,将 apache 改为 nginx
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
# 重启 php-fpm
service php-fpm restart
3.修改 sudoers 文件
chmod 600 /etc/sudoers
vim /etc/sudoers
# root 这一行下边添加两行
root ALL=(ALL) ALL
nginx ALL=(ALL) ALL # 新添加这一行
%nginx ALL=(ALL) NOPASSWD: ALL # 设置 xxx 组下面的用户使用 sudo 不需要输入密码
# 撤销文件写权限
chmod 400 /etc/sudoers
4.php 命令
$cmd = 'sudo libreoffice --headless --convert-to pdf ' . $docxName . ' --outdir ' . $pdfPath;
exec($cmd . ' 2>&1', $output, $status);
exec('sudo chmod 777 ' . $pdfName);
三、php 相关代码
/**
* @param string $path 文件全路径
* @param string $officeFile 全路径文件名
* @param string $title 文件名称,不含扩展名
* @return string
* @throws BusinessException
*/
public static function createPdf($path, $officeFile, $title)
{
if (!is_file($officeFile)) throw new BusinessException(ErrorCode::$officeFileNotExistError);
// 生成目录
mkdirs($path);
/**
* yum install libreoffice 将 word 转成 pdf
* 2>&1:表示shell脚本执行过程中的错误信息会被输出
* output:数组格式,用于存储 2>&1 输出的错误信息
* status:shell 脚本的执行状态,0 表示成功,其他都表示失败
**/
$cmd = "sudo libreoffice --headless --convert-to pdf --outdir " . $path . " '" . $officeFile . "'"; // 注意中文名称处理
exec($cmd . ' 2>&1', $output, $status);
$pdfName = rtrim($path, '/') . '/' . $title . '.pdf';
exec("sudo chmod 777 '" . $pdfName . "'"); // pdf root 用户创建
write_log('pdf 转换命令:' . $cmd);
write_log('pdf 命令执行结果:' . var_export($output, true));
return $pdfName;
}
标签:
libreoffice7.5