温馨提示×

LibOffice在CentOS上如何集成其他软件

小樊
45
2026-01-08 05:49:50
栏目: 编程语言

在 CentOS 上集成 LibreOffice 的实用方案

一 安装与准备

  • 安装 LibreOffice RPM 包(以 7.6.7 为例,可按需替换版本):
    • 下载并解压: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
    • 安装:tar -xf LibreOffice_7.6.7_Linux_x86-64_rpm.tar.gz && cd LibreOffice_7.6.7*/RPMS && yum -y install ./*.rpm
    • 可选:将命令软链为统一名称:mv /bin/libreoffice7.6 /bin/libreoffice
  • 常见依赖(无头/服务器环境也建议安装以避免图形库缺失):yum -y install libXinerama cairo cups-libs
  • 验证安装:libreoffice --version;命令行转换测试:libreoffice --headless --invisible --convert-to pdf /path/file.docx --outdir /tmp
  • 说明:LibreOffice 在 CentOS 上兼容性良好,适合服务器场景使用。

二 与 Python 应用集成(推荐 UNO 服务)

  • 使用 LibreOffice 自带的 Python 3.8 安装 UNO 组件(避免污染系统 Python):
    • 进入程序目录:cd /opt/libreoffice7.6/program
    • 安装 pip:wget https://bootstrap.pypa.io/get-pip.py && ./python get-pip.py
    • 安装服务与转换工具:./python -m pip install unoserver
  • 启动 UNO 监听服务(建议常驻后台并输出日志):
    • 方式一:nohup /opt/libreoffice7.6/program/python-core-3.8.19/bin/unoserver >/var/log/uno.log 2>&1 &
    • 方式二:为方便调用,创建可执行封装脚本(/usr/bin/unoserver):
      • #!/opt/libreoffice7.6/program/python import os os.system(“nohup /opt/libreoffice7.6/program/python-core-3.8.19/bin/unoserver >/var/log/uno.log 2>&1 &”)
  • Python 客户端最小示例(使用 unotools):
    • pip install unotools
    • 代码示例:
      • from unotools import Socket, connect
      • from unotools.unohelper import convert
      • ctx = connect(Socket(‘127.0.0.1’, 2002))
      • convert(ctx, ‘/tmp/in.docx’, ‘/tmp/out.pdf’, ‘pdf’)
  • 适用场景:Web 服务并发转换、微服务解耦、长生命周期任务。

三 与 Web 服务集成(Flask 示例)

  • 思路:UNO 服务常驻(上节),Web 进程仅负责接收文件、调用转换、回传结果。
  • 最小示例(Flask + unotools):
    • from flask import Flask, request, send_file
    • from unotools import Socket, connect
    • from unotools.unohelper import convert
    • import tempfile, os
    • app = Flask(name)
    • @app.route(‘/convert’, methods=[‘POST’])
    • def do_convert():
      • f = request.files[‘file’]
      • in_path = os.path.join(tempfile.mkdtemp(), f.filename)
      • f.save(in_path)
      • out_path = os.path.splitext(in_path)[0] + ‘.pdf’
      • ctx = connect(Socket(‘127.0.0.1’, 2002))
      • convert(ctx, in_path, out_path, ‘pdf’)
      • return send_file(out_path, as_attachment=True)
    • 运行建议:gunicorn/uwsgi + 反向代理;UNO 服务与 Web 服务可同机或分离部署(注意网络和防火墙)。

四 与系统工具及流程集成

  • 命令行批量/定时转换(无头模式):
    • 示例:libreoffice --headless --invisible --convert-to pdf /data/docs/*.docx --outdir /data/pdf
    • 定时:将命令写入脚本,交由 crond 定时执行(/etc/crontab 或 systemd timer)。
  • 字体与渲染优化(中文/报表场景常用):
    • 拷贝中文字体(如 simsun.ttc)至 /usr/share/fonts/,执行:mkfontscale && mkfontdir && fc-cache -fv
    • 说明:安装字体后可显著改善导出 PDF 的显示一致性。

五 常见问题与排障

  • 依赖缺失导致启动失败:安装 libXinerama、cairo、cups-libs 等系统库后重试。
  • 并发与稳定性:
    • 避免为每个请求反复启动/退出 soffice 进程,优先采用“UNO 服务常驻 + 多客户端复用”的架构。
    • 如需更高并发,可部署多个 UNO 实例并做简单负载分发(如按文件哈希取模)。
  • 字符编码与格式:确保文档保存为 UTF-8;复杂格式(页眉页脚、目录、嵌入字体)在转换前用应用侧做一次“保真预览”验证。
  • 日志与诊断:UNO 服务日志(如 /var/log/uno.log)与 LibreOffice 命令行标准输出/错误输出是首要排查依据。

0