使用Python处理PDF文件的常见操作与实战

小满
小满
发布时间:2026-10-12| 3人浏览过
原创

本文介绍如何利用Python生态中的PyPDF2、pdfminer.six与reportlab等工具,完成PDF文本读取、图片提取、新建生成以及拆分合并等常见操作。包含基础环境配置、核心代码示例与注意事项,适用于日常文档自动化处理场景。

Python处理PDF的核心工具简介

在现代数字化办公中,PDF已成为标准的跨平台文档格式。Python凭借丰富的第三方库生态,能够高效完成从解析、编辑到生成的全流程自动化。常用的基础库包括PyPDF2(侧重结构与页面操作)、pdfminer.six(专注高精度文本提取)以及reportlab(用于程序化生成PDF)。掌握这些工具的接口,即可快速搭建文档处理流水线。

环境准备与依赖安装

第1步:安装Python处理依赖库

确保系统已安装Python 3.6及以上版本。通过内置的包管理工具下载并锁定所需库的当前稳定版,后续所有文件解析与生成均依赖此基础环境。

pip install PyPDF2 pdfminer.six reportlab

常见PDF处理操作详解

第2步:读取PDF文本内容

获取PDF内的可编辑文本是数据分析与归档的基础步骤。通过逐页遍历并调用文本抽取方法,可将散落在各页面的字符拼接为完整字符串,便于后续正则匹配或存储到数据库。

import PyPDF2

def read_pdf(file_path):
    # 使用二进制只读模式打开文件
    with open(file_path, 'rb') as file:
        pdf_reader = PyPDF2.PdfFileReader(file)
        num_pages = pdf_reader.numPages
        text = ''
        for page_num in range(num_pages):
            page = pdf_reader.getPage(page_num)
            page_text = page.extract_text()
            if page_text:
                text += page_text + '\n'
        return text

# 替换为你的实际文件路径
pdf_text = read_pdf('example.pdf')
print(pdf_text[:200])  # 打印前200个字符核对结果

第3步:提取页面内嵌图片资源

部分PDF作为电子相册或设计稿时,会直接封装图像流。通过定位页面资源对象(XObject)并筛选图像子类型,可剥离原始像素数据进行保存。⚠️注意:不同版本的PDF加密或压缩算法可能导致直接提取的二进制流与预期格式不符。

import PyPDF2

def extract_images(file_path):
    with open(file_path, 'rb') as file:
        pdf_reader = PyPDF2.PdfFileReader(file)
        num_pages = pdf_reader.numPages
        images = []
        for page_num in range(num_pages):
            page = pdf_reader.getPage(page_num)
            resources = page.get('/Resources', {})
            x_object = resources.get('/XObject', {})
            if not x_object:
                continue
            for obj_key in x_object:
                obj = x_object[obj_key]
                # 判断是否为图像对象
                if obj.get('/Subtype') == '/Image':
                    images.append(obj)
        return images

# 执行提取
pdf_images = extract_images('example.pdf')
for i, img_obj in enumerate(pdf_images):
    img_data = img_obj.getData()
    # 根据实际压缩类型决定后缀名(例如 /DCTDecode 为 .jpg)
    with open(f'image_raw_{i}.bin', 'wb') as f:
        f.write(img_data)

第4步:创建基础PDF文档

当需要将结构化数据导出为标准报表时,可使用reportlab构建空白画布并绘制元素。该方式完全由代码驱动,适合定时任务自动生成合同、发票或统计图表底稿。

from reportlab.pdfgen import canvas

def create_pdf(file_path):
    c = canvas.Canvas(file_path)
    # 设置字体与字号
    c.setFont("Helvetica", 12)
    # 坐标原点默认在左下角(100, 700)处绘制标题
    c.drawString(100, 700, "Hello, Generated PDF!")
    
    # 添加内嵌图片占位测试
    image_path = "cover.jpg"
    c.drawImage(image_path, 100, 500, width=200, height=150, preserveAspectRatio=True)
    
    # 保存并关闭文件句柄
    c.save()

# 生成输出
create_pdf("output_new.pdf")

第5步:合并与拆分PDF文件

面对多份零散资料或超长报告,按需求合并分卷或拆分归档能大幅提升管理效率。合并操作按顺序追加页面,拆分则逐个写入独立文件。⚠️重要提醒:覆盖同名输出文件不可逆,建议在写入前清理目标目录或检查文件存在状态。

import PyPDF2
import os

def merge_pdfs(input_files, output_file):
    # 备份风险提醒:若output_file已存在将被完全覆盖
    if os.path.exists(output_file):
        print(f"警告:{output_file} 已存在,即将被覆盖。")
    merger = PyPDF2.PdfFileMerger()
    for f_path in input_files:
        if os.path.isfile(f_path):
            merger.append(f_path)
        else:
            print(f"跳过不存在的路径:{f_path}")
    with open(output_file, 'wb') as f_out:
        merger.write(f_out)

def split_pdf(input_file, output_prefix):
    with open(input_file, 'rb') as f_in:
        reader = PyPDF2.PdfFileReader(f_in)
        total = reader.numPages
        for idx in range(total):
            writer = PyPDF2.PdfFileWriter()
            writer.addPage(reader.getPage(idx))
            part_name = f"{output_prefix}_page_{idx+1}.pdf"
            with open(part_name, 'wb') as f_part:
                writer.write(f_part)

# 执行合并与拆分
merge_pdfs(['part_a.pdf', 'part_b.pdf'], 'combined.pdf')
split_pdf('large_report.pdf', 'split_output')

注意事项与进阶排错

实际业务中常遇到编码乱码、扫描版PDF无法读取文字或内存溢出等问题。若extract_text()返回空字符串,说明页面仅含矢量图形或扫描件,需接入OCR引擎。针对超大文件逐页读取易触发内存泄漏,建议配合生成器模式按需加载。此外,PyPDF2的旧版接口在部分复杂排版上兼容性有限,长期项目可平滑迁移至功能更完善的pypdf或pdfplumber。

总结

以上就是利用Python编写PDF读取提取合并创建代码的详细内容,更多关于Python自动化办公与文档处理的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。