【学习记录】如何使用 Python 提取 PDF 文件中的内容

如何使用 Python 提取 PDF 文件中的内容

在文档自动化处理、数据提取和信息分析等任务中,从 PDF 文件中提取文本是一项常见需求。PDF 文件通常分为两种类型:基于文本的 PDF 和 包含扫描图像的 PDF。

本文将介绍如何使用 Python 分别提取这两种类型的 PDF 内容,并提供完整的代码示例和实用技巧。


一、提取基于文本的 PDF 内容

1. 使用 PyPDF2 提取纯文本

PyPDF2 是一个轻量级但功能强大的库,适合用于读取和提取标准文本型 PDF 中的内容。

安装
bash 复制代码
pip install PyPDF2
示例代码
python 复制代码
import PyPDF2

def extract_text_from_pdf(pdf_path):
    with open(pdf_path, 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        text = ""
        for page in reader.pages:
            text += page.extract_text()
        return text

# 使用示例
pdf_path = 'example.pdf'
extracted_text = extract_text_from_pdf(pdf_path)
print(extracted_text)

⚠️ 注意:对于格式复杂或字体嵌入的 PDF,某些页面可能无法正确提取文本。


2. 使用 pdfplumber 提取表格和布局复杂的文本

如果你需要提取含有表格、列布局或精确坐标信息的 PDF,pdfplumber 是更合适的选择。

安装
bash 复制代码
pip install pdfplumber
示例代码
python 复制代码
import pdfplumber

def extract_text_from_pdf(pdf_path):
    with pdfplumber.open(pdf_path) as pdf:
        text = ""
        for page in pdf.pages:
            text += page.extract_text()
        return text

# 使用示例
pdf_path = 'example.pdf'
extracted_text = extract_text_from_pdf(pdf_path)
print(extracted_text)

✅ 特点:支持表格识别、文字坐标定位等功能。


二、提取扫描图像型 PDF 内容(OCR)

对于由扫描图片组成的 PDF 文件,必须借助 光学字符识别(OCR)技术 来提取其中的文字。

1. 安装依赖项

你需要安装 Tesseract OCR 引擎以及对应的 Python 封装库。

Windows:
  • 下载并安装 Tesseract OCR
  • 添加 Tesseract 到系统环境变量(例如路径为 C:\Program Files\Tesseract-OCR\tesseract.exe)
  • 安装 Python 库:
bash 复制代码
pip install pytesseract pillow pdf2image
  • 安装 Poppler(用于将 PDF 转换为图像):
Linux / macOS:
bash 复制代码
sudo apt install tesseract-ocr libpoppler-cpp-dev  # Ubuntu/Debian
brew install tesseract poppler                    # macOS (Homebrew)
pip install pytesseract pillow pdf2image

2. 示例代码:结合 pdf2image + pytesseract 提取扫描 PDF 内容

python 复制代码
from pdf2image import convert_from_path
import pytesseract
from PIL import Image

def extract_text_from_scanned_pdf(pdf_path):
    # 将 PDF 转换为图像列表
    images = convert_from_path(pdf_path)

    extracted_text = ""
    for image in images:
        # 对每张图片执行 OCR
        text = pytesseract.image_to_string(image)
        extracted_text += text + "\n"

    return extracted_text

# 使用示例
pdf_path = 'scanned_example.pdf'
text = extract_text_from_scanned_pdf(pdf_path)
print(text)

✅ 说明:该方法会逐页将 PDF 转换为图像,再通过 OCR 提取文字,适用于高质量扫描件。


三、总结与建议

PDF 类型 推荐库 特点
纯文本型 PDF PyPDF2 或 pdfplumber 快速、高效,适合标准 PDF 文档
扫描图像型 PDF pdf2image + pytesseract 支持 OCR,适合图像型 PDF,但速度较慢

✅ 建议:

  • 优先判断 PDF 类型 :可以尝试用 PyPDF2 提取看看是否有返回内容,若为空则可能是扫描图像。
  • 提高 OCR 准确率 :可先对图像进行预处理(如灰度化、二值化),再传给 pytesseract。
  • 多语言支持 :Tesseract 支持多种语言包,可通过 -l 参数指定语言,如 pytesseract.image_to_string(img, lang='chi_sim') 提取中文。

四、扩展功能推荐

功能 工具 描述
表格识别 camelot 或 tabula-py 专门用于提取 PDF 中表格数据
PDF 加密破解 pikepdf 可用于打开加密 PDF 文件(需密码)
PDF 合并与拆分 PyPDF2 / pypdf 拆分、合并、旋转 PDF 页面
PDF 注释提取 pdfminer.six 提供底层解析能力,适合高级用途

🔚 结语

无论是处理普通的文本型 PDF 还是扫描图像型 PDF,Python 都提供了丰富的第三方库来帮助我们实现高效的文本提取。掌握这些工具不仅能提升办公效率,还能为数据分析、文档管理、信息自动化等场景打下坚实基础。


📌 如果你正在从事数据工程、自动化脚本开发或文档处理相关的工作,熟练使用这些库将大大增强你的生产力。同时,也可以根据实际需求,结合日志记录、GUI 界面、批量处理等功能进行二次开发。

💬 欢迎留言交流你在项目中使用这些技术的经验,或者你遇到的相关问题,我们一起探讨 Python 文档处理的最佳实践!

相关推荐
威哥爱编程19 分钟前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos
威哥爱编程28 分钟前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官
python·agent·harmonyos
2601_967980111 小时前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒
python·api·限流·并发·量化
伞伞悦读1 小时前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验
人工智能·python·深度学习·机器学习
新*1 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
David猪大卫2 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger2 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
卷无止境3 小时前
mathmodel-figure-templates 以及两个上手案例
后端·python
fengci.4 小时前
CTF2MISC中等部分
开发语言·前端·学习
锋行天下4 小时前
服务器 Python 2.7 装不了 langgraph-cli?用本地生成 Dockerfile 曲线救国
人工智能·后端·python