首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python操作PDF文件的几种方式

Python操作PDF文件的几种方式

原创
作者头像
技术文章分析
发布2025-09-21 14:08:59
发布2025-09-21 14:08:59
12600
代码可运行
举报
文章被收录于专栏:技术技术
运行总次数:0
代码可运行

1. 核心库介绍

处理 PDF 最常用的 Python 库有以下几个:

1.1 PyPDF2 / pypdf (推荐 pypdf)
  • 简介: PyPDF2 是一个纯 Python 库,用于分割、合并、裁剪和转换 PDF 文件。它自 2022 年起已重命名为 pypdf,并持续维护和更新。pypdfPyPDF2 的继任者,修复了大量 bug 并增加了新功能。
  • 安装:bash深色版本pip install pypdf # 或者旧版本 (不推荐) # pip install PyPDF2
  • 特点:
    • 纯 Python,无需外部依赖。
    • 支持 PDF 读取、写入、合并、分割、加密、解密。
    • 可以提取文本和元数据。
    • 局限性: 无法直接编辑 PDF 内容(如修改文字、插入图片),主要是对现有 PDF 进行操作。
1.2 pdfplumber
  • 简介: 建立在 pypdf 之上,专注于精确提取 PDF 中的文本、表格和图形信息。它能很好地处理表格,是数据提取的利器。
  • 安装:bash深色版本pip install pdfplumber
  • 特点:
    • 提取文本位置、字体、大小等信息。
    • 强大的表格提取功能,可以将 PDF 表格转换为 Python 列表或 Pandas DataFrame。
    • 可视化页面内容(用于调试)。
1.3 pdfminer.six
  • 简介: pdfminer 的一个活跃分支,专注于从 PDF 中提取文本和布局信息。功能非常强大,适合复杂的文本分析。
  • 安装:bash深色版本pip install pdfminer.six
  • 特点:
    • 提取文本及其精确的坐标、字体、颜色等。
    • 可以分析页面布局。
    • 适合需要深度文本分析的场景。
1.4 reportlab
  • 简介: 用于创建和修改 PDF 文件的强大库。如果你需要从头生成 PDF 报告、发票等,reportlab 是最佳选择。
  • 安装:bash深色版本pip install reportlab
  • 特点:
    • 创建包含文本、图像、表格、图表的复杂 PDF。
    • 支持中文(需要指定字体)。
    • 功能强大但学习曲线较陡。

2. 实战应用:使用 pypdf 操作 PDF

2.1 读取 PDF 并提取信息
代码语言:javascript
代码运行次数:0
运行
复制
python深色版本from pypdf import PdfReader

# 创建 PDF 读取器对象
reader = PdfReader("example.pdf")

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

# 获取文档元数据
if reader.metadata:
    print(f"作者: {reader.metadata.author}")
    print(f"标题: {reader.metadata.title}")
    print(f"创建日期: {reader.metadata.creation_date}")

# 提取第一页的文本
first_page = reader.pages[0]
text = first_page.extract_text()
print("第一页内容:")
print(text)
ZHIBO.76ZHIBO.CN18丨SOHU.CYDDW.CN42丨ZHIBO.04SZFK.COM78丨MAP.ZKAFX120.COM55
WAP.YUYOUKE.NET35丨WEIBO.XIANGHETL.COM25丨WEIBO.FMMITV.COM81丨FOOTBALL.0318SEO.COM52
WWW.PORTASTYL.COM24丨YES.NJZHONGTONG.COM37丨MOBI.SHOA01.COM26丨LIVE.ENDYEDU.COM10
24K.GZXZDZ.CN55丨MAP.NMFZTD.ORG.CN30丨QQ.QDSKYWGJJNG.COM69丨FREE.QQRJ.CN39
YUSHA168.COM75丨TJBD120.COM44丨TV.FJZB2.COM41丨ZHIBO.SHANTT.CN41
ONLINE.ZZZ-Z.CN85丨FOOTBALL.HASUNSOFT.COM42丨XGLXX.COM42丨SOHU.MINGPEI.NET69
BOLL.HBST123.COM30丨FREE.SHKYBZ.CN58丨CCTV.QZSYHB.CN58丨FOOTBALL.SANACE.COM.CN26
YES.HASUNSOFT.COM11丨SOHU.HNTGNETWORK.COM14丨VIP.CLQMW.COM15丨WAP.BTJZ.NET.CN74
LANQIU.CLQMW.COM33丨CCTV.ZQIPR.COM85丨FOOTBALL.ZQIPR.COM64丨ZHIHU.ZHENGXIANGJINSHU.COM29
VIP.DGBLJZ.COM73丨SINA.GSXZFWZX.COM63丨SHIJIEBEI.HENGHUASZ.COM72丨PRETTY.CHRONOPORTAL.CN83
LVYIN.SJZXHD.CN25丨SHARE.ZHENGXIANGJINSHU.COM97丨M.ZZKFJYZX.COM47丨OUGUAN.YUYOUKE.NET29
YES.XMJIUSHI.CN70丨PRETTY.KSSJ666.COM91丨WEIBO.CTDSBGG.COM11丨SWEET.HZSMC.COM77
2.2 合并多个 PDF
代码语言:javascript
代码运行次数:0
运行
复制
python深色版本from pypdf import PdfMerger

merger = PdfMerger()

# 添加多个 PDF 文件
pdf_files = ["file1.pdf", "file2.pdf", "file3.pdf"]
for pdf in pdf_files:
    merger.append(pdf)

# 将合并后的结果写入新文件
merger.write("merged_output.pdf")
merger.close()  # 记得关闭
2.3 分割 PDF
代码语言:javascript
代码运行次数:0
运行
复制
python深色版本from pypdf import PdfReader, PdfWriter

reader = PdfReader("original.pdf")
writer = PdfWriter()

# 将前5页保存为一个新文件
for page_num in range(min(5, len(reader.pages))):
    page = reader.pages[page_num]
    writer.add_page(page)

with open("first_5_pages.pdf", "wb") as output_file:
    writer.write(output_file)
2.4 加密 PDF
代码语言:javascript
代码运行次数:0
运行
复制
python深色版本from pypdf import PdfReader, PdfWriter

reader = PdfReader("unencrypted.pdf")
writer = PdfWriter()

# 将所有页面添加到 writer
for page in reader.pages:
    writer.add_page(page)

# 添加加密,设置用户密码和所有者密码
writer.encrypt(user_password="user123", owner_password="owner456")

with open("encrypted.pdf", "wb") as output_file:
    writer.write(output_file)
2.5 解密 PDF
代码语言:javascript
代码运行次数:0
运行
复制
python深色版本from pypdf import PdfReader, PdfWriter

reader = PdfReader("encrypted.pdf")

# 检查是否加密
if reader.is_encrypted:
    # 提供密码进行解密
    reader.decrypt("user123")  # 或者 "owner456"

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

with open("decrypted.pdf", "wb") as output_file:
    writer.write(output_file)

3. 实战应用:使用 pdfplumber 提取表格

代码语言:javascript
代码运行次数:0
运行
复制
python深色版本import pdfplumber

with pdfplumber.open("financial_report.pdf") as pdf:
    # 假设表格在第一页
    page = pdf.pages[0]
    
    # 提取页面上的所有表格
    tables = page.extract_tables()
    
    # 遍历每个表格
    for i, table in enumerate(tables):
        print(f"表格 {i+1}:")
        for row in table:
            print(row)  # 每行是一个列表
    
    # 如果只想提取一个特定的表格,可以使用 extract_table()
    # table = page.extract_table()
    
    # 可视化表格边界(用于调试)
    # im = page.to_image()
    # im.draw_rects(page.extract_words())  # 画出单词边界
    # im.show()

4. 实战应用:使用 reportlab 创建 PDF

代码语言:javascript
代码运行次数:0
运行
复制
python深色版本from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

# 注册中文字体 (需要有字体文件)
# pdfmetrics.registerFont(TTFont('SimSun', 'simsun.ttc'))

# 创建画布
c = canvas.Canvas("hello.pdf", pagesize=letter)
width, height = letter

# 添加文本
c.setFont("Helvetica", 16)
c.drawString(100, height - 100, "Hello, this is a PDF generated by Python!")

# 添加更多文本
c.setFont("Helvetica", 12)
c.drawString(100, height - 130, "Using the reportlab library.")

# 保存
c.save()
print("PDF 已创建: hello.pdf")

5. 注意事项与最佳实践

  1. 选择合适的库:
    • 读取/合并/分割: 用 pypdf
    • 提取表格/精确文本: 用 pdfplumber
    • 深度文本分析: 用 pdfminer.six
    • 生成 PDF: 用 reportlab
  2. 文件路径: 确保文件路径正确,最好使用绝对路径或 os.path 处理相对路径。
  3. 异常处理: PDF 文件可能损坏或加密,操作时应使用 try-except 处理异常。
  4. 内存管理: 对于大文件,注意及时关闭文件对象(使用 with 语句或手动 close())。
  5. 文本提取的局限性: PDF 中的文本提取可能不完美,尤其是扫描的 PDF(图片)或布局复杂的文档。对于扫描件,需要先使用 OCR(如 pytesseract + 图像处理库)。
  6. 中文支持: pypdf 提取中文通常没问题,但 reportlab 生成中文需要手动注册中文字体。

6. 总结

Python 操作 PDF 文件的能力非常强大。通过 pypdfpdfplumberreportlab 等库,你可以:

  • 自动化文档处理:合并合同、分割报告、批量加密。
  • 数据提取:从财务报表、账单中提取表格数据。
  • 生成报告:自动化生成周报、发票、证书等。
  • 信息分析:分析 PDF 文档的内容和元数据。

建议从 pypdf 开始,掌握基本的读取、合并、分割操作,然后根据需要学习 pdfplumber 进行表格提取,或学习 reportlab 来生成专业的 PDF 文档。动手实践是掌握这些技能的最佳方式!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 核心库介绍
    • 1.1 PyPDF2 / pypdf (推荐 pypdf)
    • 1.2 pdfplumber
    • 1.3 pdfminer.six
    • 1.4 reportlab
  • 2. 实战应用:使用 pypdf 操作 PDF
    • 2.1 读取 PDF 并提取信息
    • 2.2 合并多个 PDF
    • 2.3 分割 PDF
    • 2.4 加密 PDF
    • 2.5 解密 PDF
  • 3. 实战应用:使用 pdfplumber 提取表格
  • 4. 实战应用:使用 reportlab 创建 PDF
  • 5. 注意事项与最佳实践
  • 6. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档