← 异常处理 | python-docx →

PyPDF2

PyPDF2 是一个纯 Python 编写的 PDF 工具库,可以读取、分割、合并和转换 PDF 文件。

安装

pip install PyPDF2

读取 PDF 信息

from PyPDF2 import PdfReader

# 读取 PDF 文件
reader = PdfReader('example.pdf')

# 获取页数
print(f"总页数: {len(reader.pages)}")

# 获取 PDF 信息
info = reader.metadata
print(f"标题: {info.get('/Title', '未知')}")
print(f"作者: {info.get('/Author', '未知')}")
print(f"创建者: {info.get('/Creator', '未知')}")

# 读取第一页
page = reader.pages[0]
print(f"第一页内容: {page.extract_text()}")

提取所有文本

from PyPDF2 import PdfReader

def extract_text_from_pdf(pdf_path):
    reader = PdfReader(pdf_path)
    text = ""

    for page in reader.pages:
        text += page.extract_text() + "\n"

    return text

# 提取文本
text = extract_text_from_pdf('example.pdf')
print(text)

# 保存到文本文件
with open('output.txt', 'w', encoding='utf-8') as f:
    f.write(text)

合并 PDF 文件

from PyPDF2 import PdfMerger

# 创建合并器
merger = PdfMerger()

# 添加 PDF 文件
merger.append('file1.pdf')
merger.append('file2.pdf')
merger.append('file3.pdf')

# 或者使用文件对象
with open('file4.pdf', 'rb') as f:
    merger.append(f)

# 保存合并后的 PDF
merger.write('merged.pdf')
merger.close()

分割 PDF 文件

from PyPDF2 import PdfReader, PdfWriter

# 读取 PDF
reader = PdfReader('example.pdf')

# 分割:提取前 3 页
writer = PdfWriter()
for i in range(3):
    writer.add_page(reader.pages[i])

# 保存
with open('first_3_pages.pdf', 'wb') as f:
    writer.write(f)

# 分割:提取特定页面
writer = PdfWriter()
writer.add_page(reader.pages[0])  # 第1页
writer.add_page(reader.pages[2])  # 第3页
writer.add_page(reader.pages[4])  # 第5页

with open('selected_pages.pdf', 'wb') as f:
    writer.write(f)

旋转 PDF 页面

from PyPDF2 import PdfReader, PdfWriter

# 读取 PDF
reader = PdfReader('example.pdf')
writer = PdfWriter()

# 旋转所有页面 90 度
for page in reader.pages:
    page.rotate(90)
    writer.add_page(page)

# 保存
with open('rotated.pdf', 'wb') as f:
    writer.write(f)

# 旋转特定页面
writer = PdfWriter()
for i, page in enumerate(reader.pages):
    if i == 0:  # 第一页旋转 180 度
        page.rotate(180)
    writer.add_page(page)

with open('rotated_first_page.pdf', 'wb') as f:
    writer.write(f)

加密和解密 PDF

from PyPDF2 import PdfReader, PdfWriter

# 加密 PDF
reader = PdfReader('example.pdf')
writer = PdfWriter()

for page in reader.pages:
    writer.add_page(page)

# 添加密码
writer.encrypt('user_password', owner_password='owner_password')

# 保存加密的 PDF
with open('encrypted.pdf', 'wb') as f:
    writer.write(f)

# 解密 PDF
reader = PdfReader('encrypted.pdf')
if reader.is_encrypted:
    reader.decrypt('user_password')

# 提取解密后的内容
page = reader.pages[0]
print(page.extract_text())

添加水印

from PyPDF2 import PdfReader, PdfWriter

# 读取 PDF 和水印
pdf_reader = PdfReader('example.pdf')
watermark_reader = PdfReader('watermark.pdf')

writer = PdfWriter()

# 为每一页添加水印
watermark_page = watermark_reader.pages[0]
for page in pdf_reader.pages:
    page.merge_page(watermark_page)
    writer.add_page(page)

# 保存
with open('watermarked.pdf', 'wb') as f:
    writer.write(f)
💡 提示:PyPDF2 适合处理简单的 PDF 操作,如合并、分割、提取文本等。对于复杂的 PDF 操作,可以考虑使用 pdfplumber 或 PyMuPDF。
← 异常处理 | python-docx →