Python Word 转 PDF 和 PDF 转 Word 指南

在文档处理中,Word 和 PDF 是两种最常见的格式,用途却截然不同:Word 便于编辑排版,PDF 适合分发和打印。日常工作中经常需要在两者之间转换------把合同、报告从 Word 导成 PDF 发给客户,或者把收到的 PDF 转回 Word 以便二次修改。手动逐个处理很耗时,尤其是面对几十上百份文件时。

用 Python 可以批量完成这类转换,一次脚本即可处理整个文件夹。本文以 Spire.Doc for Python 和 Spire.PDF for Python 为例,介绍 Word 转 PDF、PDF 转 Word 两个方向的基本流程,以及转换过程中的一些常用参数。

环境准备

按需安装对应的库。只做 Word 转 PDF 时安装 Spire.Doc:

bash 复制代码
pip install Spire.Doc

只做 PDF 转 Word 时安装 Spire.PDF:

bash 复制代码
pip install Spire.PDF

两个方向都要做,就同时安装:

bash 复制代码
pip install Spire.Doc Spire.PDF

在脚本中分别引入各自的模块。Word 端使用 Document 对象,PDF 端使用 PdfDocument 对象。

将 Word 文档转换为 PDF

Word 转 PDF 是最常见的需求之一,比如把可编辑的文稿固化成不可篡改的最终版。Spire.Doc 的做法很直接:加载 Word 文档,再保存为 PDF 格式。

python 复制代码
from spire.doc import *
from spire.doc.common import *

# 加载 Word 文档
document = Document()
document.LoadFromFile("年度报告.docx")

# 保存为 PDF
document.SaveToFile("年度报告.pdf", FileFormat.PDF)
document.Close()

SaveToFile() 的第一个参数是输出文件路径,第二个参数指定输出格式。这里传入 FileFormat.PDF,库会完成从 Word 到 PDF 的格式转换,包括分页、字体和图片等布局信息的还原。

如果源文件是旧版的 .doc 格式,加载时显式指定格式会更稳妥:

python 复制代码
document.LoadFromFile("旧版文档.doc", FileFormat.Doc)

使用参数控制转换效果

直接保存通常就能得到不错的结果,但有些场景需要对输出做精细控制。这时可以借助 ToPdfParameterList 参数对象。

在 PDF 中保留书签

长文档转成 PDF 后,如果希望阅读者能像看目录一样快速跳转,可以按文档标题自动生成书签:

python 复制代码
from spire.doc import *
from spire.doc.common import *

document = Document()
document.LoadFromFile("操作手册.docx")

# 创建转换参数
params = ToPdfParameterList()
# 基于文档标题生成书签
params.CreateWordBookmarks = True
params.CreateWordBookmarksUsingHeadings = True

document.SaveToFile("操作手册.pdf", params)
document.Close()

CreateWordBookmarksUsingHeadingsTrue 时,书签从文档中的标题样式自动生成;设为 False 则只使用文档中显式存在的 Word 书签。

嵌入字体,保证显示一致

转换后的 PDF 在其他机器上打开时,如果目标机器没有安装文档所用的字体,文字可能被替换,导致排版错乱。把字体嵌入到 PDF 可以避免这个问题:

python 复制代码
document = Document()
document.LoadFromFile("宣传单.docx")

params = ToPdfParameterList()
# 将所有字体嵌入 PDF
params.IsEmbeddedAllFonts = True

document.SaveToFile("宣传单.pdf", params)
document.Close()

代价是文件体积会变大,适合对排版一致性要求较高的正式文档。

给生成的 PDF 设置密码

如果 PDF 只允许指定人员查看,可以在转换时直接加密:

python 复制代码
from spire.doc.common import *

document = Document()
document.LoadFromFile("商业计划书.docx")

params = ToPdfParameterList()
params.PdfSecurity.Encrypt(
    "owner123",
    "user123",
    PdfPermissionsFlags.Default,
    PdfEncryptionKeySize.Key128Bit
)

document.SaveToFile("商业计划书.pdf", params)
document.Close()

PdfSecurity.Encrypt() 的前两个参数分别是所有者密码和用户密码:所有者密码拥有最高权限(可更改权限),用户密码是打开文件需要的密码。

将 PDF 文档转换为 Word

反向转换也很常见:PDF 内容需要修改、引用或重新排版时,转回 Word 是最方便的方式。使用 Spire.PDF 的 PdfDocument 对象,加载 PDF 后直接保存为 Word 格式。

python 复制代码
from spire.pdf import *
from spire.pdf.common import *

# 加载 PDF 文档
pdf = PdfDocument()
pdf.LoadFromFile("客户需求.pdf")

# 保存为 .docx
pdf.SaveToFile("客户需求.docx", FileFormat.DOCX)
pdf.Close()

FileFormat.DOCX 对应较新的 Word 格式。如果接收方需要使用旧版 Word,也可以换成 FileFormat.DOC 输出 .doc 文件:

python 复制代码
pdf.SaveToFile("客户需求.doc", FileFormat.DOC)

需要说明的是,PDF 本身并不保存段落、表格这类语义信息,转回 Word 后得到的是一份可编辑的文本版式。PDF 中原本是图片的内容,转换后仍是图片,不会自动变成可编辑文字。所以这类转换适合"需要编辑文本"的场景,而不适合"需要编辑图片内容"的场景。

设置转换后 Word 文档的属性

转出的 Word 文档会继承一些基础属性,也可以通过 PdfToDocConverter 提前指定,例如标题、作者、主题等文档属性:

python 复制代码
from spire.pdf import *
from spire.pdf.common import *

# 创建转换器并指定输入 PDF
converter = PdfToDocConverter("调研报告.pdf")
# 设置输出文档的属性
converter.DocxOptions.Title = "调研报告"
converter.DocxOptions.Authors = "市场部"
converter.DocxOptions.Subject = "Q3 用户调研"

# 转换为 .docx
converter.SaveToDocx("调研报告.docx")

DocxOptions 上可以设置标题、作者、主题、类别等多个字段,适合在批量导出时统一为文档补全元数据。

实用提示

  • 批量转换时,用 os.listdir() 遍历目录,对每个文件循环调用 LoadFromFile()SaveToFile(),即可一次处理整个文件夹。
  • Word 转 PDF 的字体问题最常出现在中文文档上,优先使用 IsEmbeddedAllFontsSetCustomFontsFolders() 指定字体目录。
  • 若源 PDF 是扫描件(整页都是图片),转出的 Word 无法直接编辑文字,需要先做 OCR 识别。
  • 转换完成后及时调用 Close() 释放文件句柄,避免占用文件导致后续写入失败。

总结

本文介绍了用 Python 在 Word 和 PDF 之间互相转换的完整流程:Spire.Doc 负责 Word 转 PDF,核心方法是 SaveToFile() 配合 FileFormat.PDF,并可借助 ToPdfParameterList 控制书签、字体嵌入和加密;Spire.PDF 负责 PDF 转 Word,通过 FileFormat.DOCXPdfToDocConverter 完成转换并设置文档属性。两个方向都支持批量处理,掌握这些方法后,可以把繁琐的格式转换工作交给脚本自动完成。

相关推荐
狗头大军之江苏分军1 小时前
《潮水漫过十七岁》开学了
后端
Patrick在香港2 小时前
Claude Prompt 香港场景:公文里「今日」落在 6 个日历日上,「翌日」锚错了 5 天
python·自然语言处理·正则表达式·claude·数据清洗
苏三说技术2 小时前
如何看待GPT-6在UP主众测中碾压夺冠?它是现在最强大模型吗?
后端
mldong2 小时前
一份 JSON,一条能跑的审批流:把报销流程送上工作流引擎
后端·架构
wno7042 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端
Captaincc2 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
YsyaaabB2 小时前
Python 数值分析
python
阿洛学长2 小时前
计算机二级 Python 基本操作题(15 分)真题笔记(0101 ~ 1903 全套)
python·pycharm
weixin199701080163 小时前
[特殊字符]️《二手ERP对接电商平台的总体方案:统一数据模型 + 事件驱动 + 灰度上线6原则》(附Python源码)
大数据·python
aramae3 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端