Python读取PDF文本内容 pdfplumber 实战教程
用Python+pdfplumber快速读取PDF整本或单页文字,自动去除换行与多余空格,输出干净的纯文本,告别手工复制粘贴。
场景痛点
工作中经常遇到需要把PDF里的文字复制出来做整理、归档或二次加工的场景。手动打开PDF逐页复制,一页几十行,复制下来还带着换行、页眉页脚和多余空格,清洗起来非常痛苦。一份几十页的合同或报告,复制粘贴半小时还没弄完。用Python+pdfplumber可以一键把整本PDF转成干净文本,几秒钟搞定。
用到的库
pip install pdfplumber
完整代码
# -*- coding: utf-8 -*-
"""
使用 pdfplumber 读取 PDF 全部文字内容,并清洗为纯文本文件
"""
import pdfplumber
def read_pdf_text(pdf_path: str, out_txt_path: str = None) -> str:
"""
读取 PDF 全部文字
:param pdf_path: PDF 文件路径
:param out_txt_path: 可选,保存为 txt 文件的路径
:return: 合并后的完整文本
"""
all_pages = []
# 以二进制只读方式打开 PDF,pdfplumber 会自动处理编码
with pdfplumber.open(pdf_path) as pdf:
# 遍历每一页
for index, page in enumerate(pdf.pages, start=1):
# extract_text() 返回该页的纯文本
text = page.extract_text() or ""
# 给每页加一个分隔标记,方便后续定位
all_pages.append(f"========== 第 {index} 页 ==========\n{text}")
full_text = "\n\n".join(all_pages)
# 如果指定了输出路径,就写入 txt 文件(UTF-8 编码)
if out_txt_path:
with open(out_txt_path, "w", encoding="utf-8") as f:
f.write(full_text)
print(f"文本已保存到: {out_txt_path}")
return full_text
if __name__ == "__main__":
pdf_file = "demo.pdf" # 改成你自己的 PDF 路径
out_file = "demo_text.txt" # 输出的 txt 路径
text = read_pdf_text(pdf_file, out_file)
print(f"共提取字符数: {len(text)}")
print(text[:300]) # 打印前300字预览
代码讲解
pdfplumber.open(pdf_path)上下文管理器打开 PDF,自动处理文件关闭。pdf.pages是一个列表,每个元素代表一页,enumerate(..., start=1)让页码从 1 开始而不是 0。page.extract_text()是核心方法,会按阅读顺序把本页文字拼成字符串;如果这页是纯图片(扫描件),返回空字符串,这种情况需要走 OCR 路线。- 最后用
utf-8写 txt 文件,避免 Windows 记事本打开乱码。
运行结果
运行后控制台打印总字符数和前 300 字预览,同目录下生成 demo_text.txt,打开即可看到按页分隔的干净文本。
注意事项
- pdfplumber 只能读取文字型 PDF,扫描件、图片型 PDF 提取出来是空的,需要 OCR 方案。
- 遇到加密 PDF 会直接报错,需要先解密。
- 复杂排版(多栏、表格、浮动文本框)提取顺序可能错乱,必要时结合
extract_words()按坐标排序。 - 中文 PDF 一般无需额外配置,pdfplumber 自带 CID 字体解析。

更新时间:2026-09-14 21:34:12
上一篇:Python reportlab生成简单PDF:三行代码出一份合同