轻松掌握:用 Python 的 pdfminer 将 PDF 内容保存为 Word 文档 - 详解

news/2025/10/23 16:48:40/文章来源:https://www.cnblogs.com/slgkaifa/p/19161064

轻松掌握:用 Python 的 pdfminer 将 PDF 内容保存为 Word 文档 - 详解

一、引言

PDF(Portable Document Format)是一种广泛使用的文档格式,广泛应用于报告、论文、合同以及教材中。PDF 的优势是排版稳定、跨平台显示一致,但其文本内容并不是直接存储的,而是包含文本、字体、图像、表格等排版元素的复杂结构。因此,直接将 PDF 转为可编辑的 Word 文档,对于科研、办公自动化和数据分析来说,具有较高实用价值。

在实际应用中,我们常需要:

将 PDF 文档内容转换为 Word,以便编辑或汇总

从 PDF 中提取文本用于统计、分析或 NLP 处理

批量处理多个 PDF 文件,提高工作效率

Python 的 pdfminer.six 是专业的 PDF 文本解析工具,可以解析 PDF 文档结构并提取文本。同时,python-docx 可以生成和编辑 Word 文档。结合两者即可实现 PDF → Word 的自动化转换。

二、工作原理

PDF 文件内部结构复杂,文本通常按照 页面、文本块、字符对象 排列,并非连续文本流。pdfminer 通过以下组件完成文本提取:

PDFResourceManager:管理 PDF 中的字体、图片等共享资源

TextConverter:将 PDF 页面内容转换为文本

PDFPageInterpreter:解释 PDF 页面,将页面内容解析为文本

PDFPage:按页提供迭代接口,支持逐页处理大型 PDF

转换流程示意图:

PDF 文件
│
▼
PDFResourceManager → 管理文档资源
│
▼
TextConverter → 将页面内容转换为文本
│
▼
PDFPageInterpreter → 逐页解析页面
│
▼
输出文本 → 内存或文件
│
▼
python-docx → 写入 Word 文档

三、安装依赖

使用前需要安装两个库:

pip install pdfminer.six python-docx

pdfminer.six:用于 PDF 文本提取

python-docx:用于生成 Word 文件

四、单个 PDF 转 Word 示例


1️⃣ 提取 PDF 文本

from pdfminer.high_level import extract_text
pdf_file = r"H:\示例\第8章\MyDocTemplate.pdf"
# 提取文本
text = extract_text(pdf_file)

2️⃣ 将文本写入 Word

from docx import Document
import os
# 创建 Word 文档
doc = Document()
# 按行写入文本
for line in text.splitlines():
if line.strip():  # 忽略空行
doc.add_paragraph(line)
# 保存 Word 文件
word_file = os.path.splitext(pdf_file)[0] + ".docx"
doc.save(word_file)
print(f"已将 PDF 内容保存为 Word 文件:{word_file}")

五、批量处理多个 PDF

对于文件夹中的多个 PDF,可以一次性提取并生成对应 Word 文件:

import glob
from pdfminer.high_level import extract_text
from docx import Document
import os
pdf_dir = r"H:\示例\第8章\PDF文件夹"
word_dir = r"H:\示例\第8章\Word输出"
os.makedirs(word_dir, exist_ok=True)
for pdf_path in glob.glob(os.path.join(pdf_dir, "*.pdf")):
text = extract_text(pdf_path)
doc = Document()
for line in text.splitlines():
if line.strip():
doc.add_paragraph(line)
word_file = os.path.join(word_dir, os.path.basename(pdf_path).replace(".pdf", ".docx"))
doc.save(word_file)
print(f"{pdf_path} → {word_file} 已保存")


应用场景:

批量将论文、报告、教材 PDF 转 Word

数据挖掘:将 PDF 文本统一提取,便于后续分析

办公自动化:快速生成可编辑的文档

六、优化与进阶技巧

1、文本清洗

PDF 提取的文本可能包含多余换行或空格,可使用:

clean_text = " ".join(text.split())


或按段落处理,保持格式整齐。

2、中文 PDF 处理

pdfminer.six 默认支持 UTF-8 中文

对于特殊字体或加密 PDF,可能出现乱码,可尝试使用 OCR 或其他 PDF 工具

3、按段落或关键字提取

import re
paragraphs = [p for p in text.split('\n\n') if p.strip()]
matches = re.findall(r'成绩\s*[::]\s*\d+', text)


4、输出到 Excel/CSV

可将提取的文本或表格数据写入 Excel:

import pandas as pd
lines = text.splitlines()
df = pd.DataFrame(lines, columns=['内容'])
df.to_excel(r"H:\示例\第8章\PDF内容.xlsx", index=False)


5、保留简单格式

Word 支持粗体、段落、标题,可以在 python-docx 中添加样式:

doc.add_paragraph("标题内容", style='Heading 1')

七、注意事项

1、复杂排版 PDF

表格、图片或多栏布局的 PDF,直接提取可能无法保留原始结构

若需完整还原,可结合 OCR 或专业 PDF 转 Word 软件

2、文件大小

对于大型 PDF,建议逐页提取并写入 Word,避免内存占用过高

八、总结

使用 pdfminer.six 提取 PDF 文本,结合 python-docx 写入 Word,实现自动化 PDF → Word 转换

支持单文件和批量处理,适合科研、办公自动化、数据分析等场景

对中文文本、表格、关键字提取等可进行进一步处理和优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/944446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我最常用的快捷键

显示桌面:Win + D 锁屏:Win + L 打印:Ctrl + P 搜索:Win + S 上移至顶部:Ctrl + Home 下移至底部:Ctrol + End 另外比较通常的快捷键: 打开文件:Ctrl + O 保存文件:Ctrl + S 复制:Ctrl + C 粘贴:Ctrl + V 新…

Semgrep代码审计工具的使用

Semgrep代码审计工具的使用 1 Semgrep简介 Semgrep(Semantic Grep)是一款开源的轻量级静态代码分析工具(SAST),由安全公司r2c开发和维护。它采用模式匹配的方式在代码中搜索特定模式,从而识别安全漏洞、代码质量…

WPF多语言实现

参考:https://www.cnblogs.com/chenshibao/p/18937359 开发工具:Visual Studio2022 使用资源字典实现。首先创建在项目下新建多语言目录,新建语言资源en-US.xaml内容 <ResourceDictionaryxmlns="http://sch…

16 倍性能提升,成本降低 98%! 解读 SLS 向量索引架构升级改造

为了优化大规模应用场景下的性能和成本压力,我们针对 Embedding 服务的推理瓶颈进行了系统性优化。通过深入分析、方案选择与定制优化,最终实现了吞吐量提升 16 倍,同时显著降低了单位请求的资源成本。作者:郑前祎…

unity设置外置文件,运行读取文件获取地址

直接放代码吧public static string url= "http://192.168.1.43:9100";//public static string url = "http://43.137.7.254:10028/server";private void Awake(){StartCoroutine(GetPath());}IEnu…

Microsoft Agent Framework/C#:了解Workflows的几种不同模式

前言 最近有空的时候在学习Microsoft Agent Framework,在这个框架中目前Workflows分为了Sequential、Concurrent、Handoffs以及Groupchat四种模式,今天让我们来了解一下这四种不同的模式。 首先需要以下两个包:Sequ…

CodeForces-374D Inna and Sequence

tag: *2000;线段树,二分CodeForces-374D Inna and Sequence tag: *2000;线段树有一个比特串 \(w\),初始为空。给定 \(a_1,\cdots,a_m\),满足 \(1\le a_1<\dots<a_m\)。有三种操作:操作 \(-1\):令 \(k\) 为…

字符串过长导致编译报错的问题及解决办法 - 详解

字符串过长导致编译报错的问题及解决办法 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

厨房电秤方案:介绍一款电子秤芯片sic8632

SIC8632是一款应用于厨房秤的高性能单片机芯片,由国产厂商西城微科推出。以下是对它的详细介绍:基本特性架构与存储:8位RISC架构的高性能单片机,内置4K16位一次性可编程(OTP)ROM和256字节数据存储器(SRAM),只…

CodeForces-1183F Topforces Strikes Back

tag: *2100;思维题,贪心*CodeForces-1183F Topforces Strikes Back tag: *2100;思维题,贪心给定长度为 \(n\) 的序列 \(a\),从中选出 最多 三个数,满足其中任两个之间没有倍数关系。求这三个数之和的最大值。 \(…

Excel 实现下拉多选功能

Excel 实现下拉多选功能开启宏 创建 sheet 级别的 vb 脚本 将下面代码写入Private Sub Worksheet_Change(ByVal Target As Range)Dim watchRange As RangeDim newVal As String, oldVal As StringDim items() As Strin…

CF981F Round Marriage

首先发现二分答案,然后问题就变成了一个二分图是否有完美匹配的问题,我们自然是希望用 Hall 定理来解决这一问题。 Hall 定理原本的描述还是太吃操作了,考虑猜结论,就是 \(a\) 排序后每个子区间对于其来说都合法那…

macOS直接使用pip安装报错

# 1. 创建虚拟环境 python3 -m venv venv# 2. 激活虚拟环境 source venv/bin/activate # macOS / Linux# 3. 安装你需要的包,比如 requests pip install requests

2025 年最新螺旋地桩厂家推荐排行榜:聚焦光伏大棚等场景,甄选优质实力企业桩尖/大棚/组合/地螺丝螺旋地桩厂家推荐

随着基础设施建设、光伏电站搭建及各类建筑工程的快速推进,螺旋地桩作为关键基础支撑部件,其质量与性能直接决定工程稳定性和使用寿命。但当前市场乱象丛生,部分品牌产品规格单一,难以适配山地、坡地等复杂地形;部…

CodeForces-1620D Exact Change

tag: *2000;构造,分类讨论,枚举CodeForces-1620D Exact Change tag: *2000;构造,分类讨论,枚举给定长度为 \(n\) 的序列 \(s\),要求用面值为 \(1,2,3\) 的若干硬币组合成 \(s\) 中的所有数,求最少需要多少枚硬…

Python爬虫:获取某平台数据的下载链接 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

厨房电子秤芯片方案:SIC8632

本文主要描述基于SIC8632芯片研发的电容式厨房电子秤方案。一、MCU芯片的选择原则高精度:厨房秤需要能够精确测量食材的重量,因此MCU芯片应具备高精度模数转换(ADC)功能,以实现对传感器输出信号的准确采样和转换。…

《借力JBoltAI框架,Java技术开发公司开启高效开发新范式》

在当今竞争激烈的软件开发领域,Java技术凭借其跨平台、面向对象、稳定性强等诸多优势,成为了众多企业开发各类应用的首选。对于专注于Java技术开发的公司而言,不断提升开发效率、优化项目质量、降低开发成本,是在市…

Wireshark抓包教程:JSON和HTTPS抓取

本文详细讲解Wireshark抓包工具的使用方法,涵盖JSON网址抓取、HTTPS流量捕获、数据包过滤技巧和TCP握手挥手分析。wireshark能抓取JSON网址吗 wireshark可以抓https吗 Wireshark 是一个 网络封包 分析软件。帮你撷取网…

贡献法算法思维

贡献法算法思维 Prompt: 贡献法算法思维是怎样的 Response: 非常好的问题👏!你问的这个「贡献法」,是算法竞赛中非常常见、非常重要的一种思维方式,尤其在处理计数问题、期望问题、子区间问题、树上路径问题时常常…