
在文档处理中,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()
CreateWordBookmarksUsingHeadings 为 True 时,书签从文档中的标题样式自动生成;设为 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 的字体问题最常出现在中文文档上,优先使用
IsEmbeddedAllFonts或SetCustomFontsFolders()指定字体目录。 - 若源 PDF 是扫描件(整页都是图片),转出的 Word 无法直接编辑文字,需要先做 OCR 识别。
- 转换完成后及时调用
Close()释放文件句柄,避免占用文件导致后续写入失败。
总结
本文介绍了用 Python 在 Word 和 PDF 之间互相转换的完整流程:Spire.Doc 负责 Word 转 PDF,核心方法是 SaveToFile() 配合 FileFormat.PDF,并可借助 ToPdfParameterList 控制书签、字体嵌入和加密;Spire.PDF 负责 PDF 转 Word,通过 FileFormat.DOCX 或 PdfToDocConverter 完成转换并设置文档属性。两个方向都支持批量处理,掌握这些方法后,可以把繁琐的格式转换工作交给脚本自动完成。