告别收费工具!用免费开源 LibreOffice + Python 实现 PDF 转 Word 全自动处理

403 阅读8分钟

LibreOffice 完全指南:从下载安装到 Python 自动化转换 PDF 为 Word

今天是节后的第一天,就暂且不分享技术了,分享一个工具:LibreOffice

前段时间我有一个朋友找我,怎么修改pdf上文字,然后重新导出成pdf,这个要求属实让我头大,直到我找到了LibreOffice 完美满足了这个需求,还让我通过 Python 脚本实现了文档处理的自动化,极大提升了工作效率。

今天,我将分享这份《LibreOffice 完全指南》,涵盖从下载安装、基础使用技巧,到利用 Python 实现 PDF 转 Word 的完整自动化流程。无论你是学生、研究人员、内容创作者还是办公人员,都能从中受益。


一、LibreOffice 是什么?

LibreOffice 是一款功能强大、完全免费且开源的办公套件,由 The Document Foundation 开发和维护。它是 Microsoft Office 的优秀替代品,无需订阅费用,支持跨平台(Windows、macOS、Linux),并持续更新。

核心组件一览:

组件功能类似于
Writer文字处理Microsoft Word
Calc电子表格Microsoft Excel
Impress演示文稿Microsoft PowerPoint
Draw矢量绘图与图表Visio / PowerPoint 绘图
Base数据库管理Microsoft Access
Math公式编辑器Word 公式工具

优势:支持 ODF(开放文档格式)标准,兼容 Microsoft Office 文件(DOCX、XLSX、PPTX),并可导出 PDF、HTML、EPUB 等多种格式。

相关操作页面展示

这些红色框里的也都是可以直接修改的

导出pdf

直接进行保存


二、下载与安装指南

1. 访问官网

前往官方下载页面:
👉 www.libreoffice.org/download/do…

2. 选择版本

  • Stable(稳定版):推荐大多数用户使用,功能成熟,兼容性好。
  • Fresh(新鲜版):包含最新功能,适合追求新特性的用户,但可能存在小 Bug。

3. 安装步骤(按系统分类)

🖥️ Windows 系统
# 1. 下载 `.exe` 安装包(约 300MB)
# 2. 双击运行安装程序
# 3. 选择“典型安装”或“自定义安装”
# 4. 建议勾选:
#    - 创建桌面快捷方式
#    - 关联常用文档格式(.docx, .xlsx, .pptx)
🍎 macOS 系统
# 1. 下载 `.dmg` 文件
# 2. 挂载镜像后,将 LibreOffice 拖拽至“应用程序”文件夹
# 3. 首次运行时,若提示“无法打开”,请前往:
#    系统设置 → 隐私与安全性 → 允许来自“App Store 以外”的应用
🐧 Linux 系统(Ubuntu/Debian/CentOS)
# Ubuntu / Debian
sudo apt update
sudo apt install libreoffice

# CentOS / RHEL
sudo yum install libreoffice

# 或使用 Snap 包管理器(推荐)
sudo snap install libreoffice

💡 提示:Linux 用户可通过 libreoffice --version 验证是否安装成功。


三、基础使用技巧

1. 界面概览

  • 菜单栏:文件、编辑、视图、插入、格式等
  • 工具栏:常用操作一键访问(加粗、居中、字体设置等)
  • 样式面板(F11):快速应用标题、正文、列表等样式
  • 导航器(F5):快速跳转文档结构

2. 支持的文件格式

类型格式
原生格式.odt, .ods, .odp
Microsoft 兼容.docx, .xlsx, .pptx
输出格式.pdf, .html, .epub, .txt
导入支持.pdf, .rtf, .csv

🔍 PDF 导出文件 → 导出为 → 导出为 PDF,可设置压缩质量、书签、权限等。

3. 实用功能推荐

  • 模板库:内置简历、报告、信函等模板,提升效率。
  • 扩展插件:通过 工具 → 扩展管理器 添加语法检查、翻译工具等。
  • 宏支持:可用 Python、Basic 编写自动化脚本。

四、重要注意事项

⚠️ 格式兼容性

  • 大多数 DOCX/XLSX 文件可完美打开。
  • 复杂排版、高级宏、特定字体 可能需要手动调整。
  • 建议转换后检查格式是否错乱,尤其是表格和图片。

⚙️ 性能优化建议

  • 大型文档建议分章节处理。
  • 关闭不必要的扩展(如 Java 支持)以加快启动速度。
  • 清理缓存路径:~/.config/libreoffice/4/user/backup/(Linux/macOS)或 %APPDATA%\LibreOffice\4\user\backup\(Windows)

❓ 常见问题解决

问题解决方案
启动缓慢禁用 Java:工具 → 选项 → 高级 → 取消勾选 Java
字体缺失安装常用中文字体包(如思源黑体)
文件损坏使用“恢复”功能或从备份恢复

五、Python 自动化:PDF 转 Word

LibreOffice 内置强大的命令行工具,结合 Python 可实现 批量自动化转换,非常适合处理大量 PDF 文档。

1. 环境准备

pip install python-docx  # 可选:用于后续 Word 内容处理
# LibreOffice 已提供命令行支持,无需额外库

✅ 确保 LibreOffice 已正确安装并可全局调用。


方法一:基础转换脚本(推荐)

import subprocess
import os
import sys

def setup_libreoffice_path():
    """自动查找 LibreOffice 可执行文件路径"""
    if sys.platform == "win32":
        paths = [
            r"C:\Program Files\LibreOffice\program\soffice.exe",
            r"C:\Program Files (x86)\LibreOffice\program\soffice.exe"
        ]
    elif sys.platform == "darwin":
        paths = ["/Applications/LibreOffice.app/Contents/MacOS/soffice"]
    else:
        paths = ["libreoffice", "/usr/bin/libreoffice"]

    for path in paths:
        if os.path.exists(path):
            return path
    raise FileNotFoundError("未找到 LibreOffice,请检查是否已安装")

def pdf_to_docx(pdf_file, output_dir=None):
    """
    将单个 PDF 文件转换为 DOCX 格式
    
    参数:
        pdf_file (str): PDF 文件路径
        output_dir (str): 输出目录(默认为 PDF 所在目录)
    返回:
        bool: 转换是否成功
    """
    if not os.path.exists(pdf_file):
        print(f" 错误:文件不存在 - {pdf_file}")
        return False

    if output_dir is None:
        output_dir = os.path.dirname(pdf_file) or "."

    os.makedirs(output_dir, exist_ok=True)

    try:
        libreoffice = setup_libreoffice_path()
        cmd = [
            libreoffice,
            '--headless',           # 无界面运行
            '--convert-to', 'docx', # 转换为目标格式
            '--outdir', output_dir, # 输出目录
            pdf_file                # 输入文件
        ]

        print(f"开始转换: {os.path.basename(pdf_file)}")
        result = subprocess.run(cmd, capture_output=True, text=True, check=True)

        if result.returncode == 0:
            output_file = os.path.join(
                output_dir,
                os.path.splitext(os.path.basename(pdf_file))[0] + '.docx'
            )
            print(f"转换成功: {output_file}")
            return True
        else:
            print(f"转换失败: {result.stderr}")
            return False

    except subprocess.CalledProcessError as e:
        print(f"命令执行失败: {e.stderr}")
        return False
    except Exception as e:
        print(f"错误: {e}")
        return False

# 批量转换函数
def batch_pdf_to_docx(pdf_folder, output_folder=None):
    """
    批量转换指定文件夹中的所有 PDF 文件
    """
    if output_folder is None:
        output_folder = os.path.join(pdf_folder, "converted_docx")

    success_count = 0
    total_count = 0

    for filename in os.listdir(pdf_folder):
        if filename.lower().endswith('.pdf'):
            total_count += 1
            pdf_path = os.path.join(pdf_folder, filename)
            if pdf_to_docx(pdf_path, output_folder):
                success_count += 1

    print(f"批量转换完成: {success_count}/{total_count} 个文件成功")
    return success_count

# 使用示例
if __name__ == "__main__":
    # 单文件转换
    pdf_to_docx("example.pdf")

    # 批量转换
    # batch_pdf_to_docx("./pdf_documents", "./editable_docs")

方法二:高级封装类(支持更多选项)

import subprocess
import os
from pathlib import Path

class PDFToWordConverter:
    def __init__(self, libreoffice_path=None):
        self.libreoffice_path = libreoffice_path or self._find_libreoffice()
    
    def _find_libreoffice(self):
        return setup_libreoffice_path()

    def convert_with_options(self, pdf_file, output_dir=None, **options):
        """
        支持自定义选项的转换
        
        参数:
            pdf_file: PDF 文件路径
            output_dir: 输出目录
            options:
                - language: 设置文档语言(如 'zh-CN')
                - invisible: 是否隐藏窗口(默认 True)
        """
        pdf_file = Path(pdf_file)
        if not pdf_file.exists():
            print(f"文件不存在: {pdf_file}")
            return False

        output_dir = Path(output_dir or pdf_file.parent)
        output_dir.mkdir(exist_ok=True)

        cmd = [self.libreoffice_path, '--headless', '--convert-to', 'docx']
        cmd.extend(['--outdir', str(output_dir)])

        # 添加语言选项(可选)
        if lang := options.get('language'):
            cmd.extend(['--language', lang])

        cmd.append(str(pdf_file))

        try:
            subprocess.run(cmd, check=True, capture_output=True, text=True)
            print(f"转换成功: {pdf_file.name}")
            return True
        except subprocess.CalledProcessError as e:
            print(f"转换失败: {e.stderr}")
            return False

# 使用示例
converter = PDFToWordConverter()
converter.convert_with_options(
    "document.pdf",
    output_dir="./converted",
    language="zh-CN"
)

六、实用场景示例

🌐 场景1:博客内容批量处理

# 将收集的 PDF 资料转换为可编辑的 Word 文档
batch_pdf_to_docx("./blog_resources", "./editable_docs")

📊 场景2:自动化内容提取(后续处理)

from docx import Document

def extract_text_from_docx(docx_file):
    doc = Document(docx_file)
    return "\n".join([para.text for para in doc.paragraphs])

# 先转换,再提取
pdf_to_docx("research.pdf")
text = extract_text_from_docx("research.docx")
print(text[:500])  # 预览前500字符

七、故障排除

❌ LibreOffice 未找到

# 手动指定路径
converter = PDFToWordConverter("/usr/bin/libreoffice")  # Linux
converter = PDFToWordConverter(r"C:\Program Files\LibreOffice\program\soffice.exe")  # Windows

🔐 权限问题(Linux/macOS)

chmod +x /usr/bin/libreoffice
# 或使用 sudo(不推荐长期使用)

🔒 文件被锁定

import time
# 转换前等待片刻,避免文件冲突
time.sleep(1)

八、总结与建议

通过 LibreOffice + Python 的组合,你可以轻松实现:

零成本 使用完整办公套件
批量自动化 文档格式转换
无缝 PDF → Word 转换,保留基本排版
集成到工作流,提升内容创作效率

📌 小贴士

  • 定期更新 LibreOffice 以获得更好的兼容性和安全修复。
  • 转换前备份原始文件,避免意外覆盖。
  • 对关键文档进行人工校对,确保格式无误。
  • 结合 python-docx 进一步处理 Word 内容(如提取、修改、生成报告)。

相关资源


注意

  • 经过我自己测试,如果使用代码进行转换时,会出现很多问题。个人建议还是不要使用代码了,但是学习还是自己动手敲敲。建议直接使用LibreOffice
  • 如果有需要源码啥的,可以私信我(我自己写了一个简单的pdf转word的脚本。如果pdf是文本类型,基本格式啥的完全正确。如果pdf是扫描件或者图片类型,目前只能通过ocr将文字识别出来,格式啥的是我自己编排的,可能不适用所有的。)

希望这篇《LibreOffice 完全指南》能帮助你解放双手,提升文档处理效率!如果你有使用心得或遇到问题,欢迎在评论区留言交流 📝💬