使用 Python 将 PDF 转换为 Word(转换单个与多个文件)

PDF 因其固定的版式和良好的跨平台一致性,非常适合分发和打印;但它本质上是一种"只读"的成品格式,想要修改其中的文字、调整段落,或把内容复用进其他文档时却很不方便。把 PDF 转换成可编辑的 Word 文档(.docx 或 .doc),就能直接在原文件基础上增删改,或把内容二次排版到报告、论文里。本文介绍 Spire.PDF 提供的两种转换路径:一行代码的基础转换,以及借助 PdfToDocConverter 在转换时同时设置 Word 文档属性的进阶用法。

为什么需要将 PDF 转换为 Word

在以下场景中,直接编辑 PDF 成本高、效果差,而转换成 Word 往往是更顺手的选择:

  • 修改或补充内容:PDF 里的错别字、过期数据想改,但源文件已丢失,转成 Word 后即可就地编辑。
  • 内容复用:把合同、说明书中的段落复制进自己的方案或论文,Word 的排版比从 PDF 复制更干净。
  • 二次排版:原始 PDF 的版式不理想,转成 Word 后能重新调整字体、行距与图文位置。
  • 接入既有工作流:许多企业的审批、归档系统以 Word 为准,收到的 PDF 需要先还原成可编辑文档。

与"截图再 OCR"或在线转换工具相比,用代码批量转换的优势在于可复现、可自动化,且能嵌入到更大的文档处理流水线中。

环境准备

本文使用 Spire.PDF for Python 完成 PDF 到 Word 的转换。该库同时支持输出为现代 .docx 与旧版 .doc 格式,并提供了专门的转换器类来定制输出文档的属性。先通过 pip 安装:

bash 复制代码
pip install Spire.PDF

安装完成后,在脚本中导入所需模块即可开始:

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

其中 FileFormat 等枚举来自 spire.pdf.common,后续转换时直接引用即可。

将 PDF 转换为 DOCX(最常用)

.docx 是 Office 2007 之后的默认格式,兼容性最好、体积也更小,绝大多数转换需求都会选择它。Spire.PDF 把转换逻辑直接封装在了 PdfDocumentSaveToFile 方法里,只需在第二个参数指定 FileFormat.DOCX,即可在保存的同时完成格式转换。

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

inputFile = "./Demos/Data/ToDocx.pdf"
outputFile = "ToDocx.docx"

# 加载待转换的 PDF 文档
doc = PdfDocument()
doc.LoadFromFile(inputFile)

# 以 DOCX 格式保存,即完成 PDF 到 Word 的转换
doc.SaveToFile(outputFile, FileFormat.DOCX)
doc.Close()

这段代码先 LoadFromFile 载入 PDF,再调用 SaveToFile 并传入 FileFormat.DOCX------引擎会在保存过程中自动把页面内容重排为 Word 的段落、表格与图片。转换结束后记得调用 Close() 释放文档资源,尤其在循环批量处理多份文件时,及时释放能避免内存占用过高。

将 PDF 转换为旧版 DOC 格式

如果你的下游系统或协作者仍在使用较老的 Word(例如 Word 2003 及更早版本),.docx 可能无法直接打开。这时可以把输出格式换成 FileFormat.DOC,得到兼容性更强的旧版 Word 文档。

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

inputFile = "./Demos/Data/ToDoc.pdf"
outputFile = "ToDoc.doc"

# 加载 PDF 文档
doc = PdfDocument()
doc.LoadFromFile(inputFile)

# 以 DOC 格式保存,兼容旧版 Word
doc.SaveToFile(outputFile, FileFormat.DOC)
doc.Close()

除了 FileFormat.DOC 这一枚举值不同,其余调用与转换为 DOCX 完全一致。在决定用哪种格式时,可以遵循一个简单的原则:面向现代 Office 或需要更小体积选 .docx,要兼容老旧环境或特定遗留系统才退而选 .doc

转换时设置 Word 文档属性

基础转换已经能满足大多数场景,但有时我们希望输出的 Word 文档自带标题、标签、作者等元数据,方便在文件管理器或企业系统中检索。Spire.PDF 提供 PdfToDocConverter 类,它在转换前暴露了一个 DocxOptions 属性,允许我们直接填写 Word 文档的内置属性,再调用 SaveToDocx 一次性输出带元数据的文档。

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

inputFile = "./Demos/Data/Sample.pdf"
outputFile = "ConvertToWordSettingProperties-result.docx"

# 创建 PDF 到 Word 的转换器
converter = PdfToDocConverter(inputFile)

# 在转换前设置输出 Word 文档的属性
converter.DocxOptions.Title = "PDFTODOCX"
converter.DocxOptions.Subject = "设置文档属性"
converter.DocxOptions.Tags = "测试标签"
converter.DocxOptions.Categories = "PDF"
converter.DocxOptions.Commments = "仅供测试使用"
converter.DocxOptions.Authors = "E-iceblue 团队"
converter.DocxOptions.LastSavedBy = "E-iceblue 团队"

# 执行转换并保存为带属性的 DOCX
converter.SaveToDocx(outputFile)

DocxOptions 下可设置的字段相当丰富:除了上面示例中的标题(Title)、主题(Subject)、标签(Tags)、类别(Categories)、备注(Commments)、作者(Authors)与最后保存者(LastSavedBy),还支持修订号(Revision)、版本(Version)、程序名(ProgramName)、公司(Company)、管理者(Manager)等。把这些信息在转换阶段就写好,可以避免事后再用 Word 或另一套库去补元数据,让文档一生成就符合归档规范。

综合示例:批量转换文件夹下的 PDF

把上面的基础方法放进循环,就能一次性把某个目录里的所有 PDF 转成 Word。下面遍历指定文件夹,对每个 .pdf 文件调用 SaveToFile(..., FileFormat.DOCX),并沿用统一的命名规则输出到结果目录。

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

pdf_dir = "./Demos/Data/Pdfs"
output_dir = "./Output"

# 确保输出目录存在
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 逐个转换目录下的 PDF 文件
for file_name in os.listdir(pdf_dir):
    if not file_name.lower().endswith(".pdf"):
        continue

    input_path = os.path.join(pdf_dir, file_name)
    output_path = os.path.join(output_dir, file_name.replace(".pdf", ".docx"))

    doc = PdfDocument()
    doc.LoadFromFile(input_path)
    doc.SaveToFile(output_path, FileFormat.DOCX)
    doc.Close()
    print(f"已转换:{file_name} -> {os.path.basename(output_path)}")

print("全部转换完成。")

这段脚本的关键点在于"用完即关":LoadFromFileSaveToFile 之间不要做与当前文档无关的重逻辑,每次循环结束都调用 Close(),这样即使处理成百上千份文件,内存也始终处于可控范围。如果需要带元数据,只要把循环体里的 PdfDocument 换成 PdfToDocConverter 并设置 DocxOptions 即可,整体结构不变。

实用技巧

  • 优先选 DOCX :除非明确要兼容 Word 2003 之前的版本,否则一律输出 .docx,体积更小、解析更可靠。
  • 先验证单份再批量:批量前先用一两份有代表性的 PDF(含表格、图片、中文)试转,确认版式还原度达标,再跑全量。
  • 中文与字体:PDF 中的中文字体在转换后一般会映射为 Word 可识别的字体;若个别字体丢失,可在转换后用 Word 或 Spire.Doc 做一次字体替换。
  • 大文件注意资源 :页数很多的 PDF 转换时占用内存较高,建议分批处理并在每份 Close() 后稍作间隔,避免单次占用过大。
  • 用 DocxOptions 规范归档 :当转换结果要进入文档管理系统时,提前在 DocxOptions 写好书名、标签与作者,比事后补元数据更高效。

总结

在实际的 PDF 转 Word 开发中,灵活运用这些转换方法能显著提升文档处理的效率。最稳健的做法是在项目初始化阶段,先通过单份文件验证排版与样式效果,再配合文档属性配置统一规范,最后通过循环脚本完成大批量文件的自动化处理。这种"先测试验证、后统一规范、再批量执行"的开发流程,既能保证转换质量,也能为后续的文档二次编辑与自动化集成提供良好的基础。

相关推荐
troy1281 小时前
Visual Studio Code 详细教程:从入门到高效开发
开发语言·python
夜雪一千1 小时前
Python ASR音频转文本 完整代码示例
python
JarmanYuo1 小时前
YOLO 涨点研究(十二):具身 CV 进阶篇——Sim2Real 域随机化与真机部署
人工智能·pytorch·python·yolo·计算机视觉
小蒜学长1 小时前
基于Python的微博热搜话题可视化分析系统的设计与实现(代码+数据库+LW)
后端·python·django·数据可视化·情感分析·微博热搜
梦帮科技1 小时前
从提示词到可复现音乐工作流:RNOISE 2.0 的 Prompt Engineering 架构
人工智能·python·mysql·ci/cd·架构·node.js·numpy
飞Link1 小时前
【Numpy】 第三部分:矩阵运算与线性代数(计算篇)
python·numpy
电商API_180079052471 小时前
电商平台数据分析实战_帖子
开发语言·爬虫·python·数据采集·京东
带多刺的玫瑰2 小时前
Leecode#35刷题之搜索插入位置
java·python·算法
QQ14220784492 小时前
IIS + wfastcgi 部署 Flask 应用实战:从连续 500 到稳定 200 的完整踩坑实录
python