背景
PDF 作为一种电子文档,对于阅读和查看是很方便的,但先要编辑却很麻烦。因此将 PDF 转换为可编辑的 Word 文档就变得尤为重要。
通过 Python 的 PDF2Docx 可以比较轻松的做到这点。具体的思路是通过文档元素和内容解析:
- 基于
PyMuPDF提取文本、图片、矢量等原始数据 - 基于规则解析章节、段落、表格、图片、文本等布局及样式
- 基于
python-docx创建Word文档
当然也有基于机器学习/计算机视觉方法训练模型(尤其是针对扫描的PDF文档)的,在这里暂不扩展。
特点
- 简单易用:PDF2DOCX 库提供了简洁明了的函数和接口,方便用户快速上手。
- 快速高效:该库采用高效的算法和技术,实现了在较短时间内完成 PDF 到 DOCX 的转换。
- 无损转换:在保持文件结构和布局完整的同时,将 PDF 转换为 DOCX,尽量减少转换过程中可能出现的失真或遗漏。
- 跨平台:支持 Windows,Mac 和 Linux 等多种操作系统,为用户提供全方位的支持。
限制
- 目前暂不支持扫描PDF文字识别
- 仅支持从左向右书写的语言(因此不支持阿拉伯语)
- 不支持旋转的文字
- 基于规则的解析无法保证100%还原PDF样式
使用方法
- 安装依赖项:
1 | pip install pdf2docx |
- 转换 PDF 到 DOCX
1 | from pdf2docx import Converter |
其中,start 和 end 参数可以用于指定转换的开始和结束页码,默认为全部转换。
注意:由于PDF文档中的元素位置可能会因为解析引擎不同而有所偏差,因此建议在导出Word文档后再进行必要的手动调整。
除了基本的转换功能之外,pdf2docx 还提供了一些其他的功能来方便用户进行更高级的操作。
解析 PDF 内容
pdf2docx 可以将 PDF 中的不同元素(如文本、表格、图片)解析为 Python 对象,以便进一步分析和处理。
1 | pythonCopy Codefrom pdf2docx import Parser |
其中,pages 是一个包含所有页面对象的列表,每个页面对象都包含了该页面中所有的元素。
每个元素可以是以下类型之一:
TextElement: 表示纯文本。ImageElement: 表示图片。TableElement: 表示表格。
每个元素都具有一些属性,例如位置、大小、样式等,可以用于进一步处理。
自定义样式
用户可以通过创建自定义样式对象来修改生成的 Word 文档的样式。
1 | pythonCopy Codefrom pdf2docx.styles import ParagraphStyle, RunStyle |
在上面的示例中,创建了一个名为 MyParaStyle 的自定义段落样式,并将字体设置为 Calibri、字号设置为 12、加粗。然后又创建了一个名为 MyRunStyle 的自定义文本样式,并将字体颜色设置为红色。最后,在段落样式中使用了该文本样式。
当转换 PDF 到 DOCX 时,指定了 para_style=my_para_style 参数,即使用了上述创建的自定义样式。
多进程转换
pdf2docx 支持多进程转换,可以提高转换速度。
1 | pythonCopy Codefrom pdf2docx import MultiConverter |
在上面的示例中,创建了一个名为 MultiConverter 的多进程转换器对象,并将 num_processes 参数设置为 4,表示同时使用 4 个进程进行转换。
注意:使用多进程转换时,请确保您的计算机具有足够的 CPU 和内存资源,以避免出现不必要的问题。
实际运用
下面是一段使用第三方库pdf2docx实现pdf转docx的代码。
该代码将pdf文件「英语4000单词本.pdf」转换成docx文件 wordBook.docx
1 | from pdf2docx import Converter |
- convert 函数的 start 和 end 参数代表需要转换的pdf页数的起始和结束位置,也可以通过
pages指定不连续的页面,例如pages=[1,3,5]。 - multiprocessing 参数代表是否启用多进程进行转换,如果设置为True则会使用多个进程进行转换
通过上面 5 行代码我们就可以进行将PDF转换为WORD文件了,也可以直接通过命令行来执行:
1 | pdf2docx convert 批地艾抚.pdf 沃的.docx |
同理可以通过--start、--end或者--pages指定页面范围。


