python学习-处理pdf文档

270 阅读4分钟

python学习-处理pdf文档

本文介绍 python 如何处理 pdf 文档,包括安装依赖库、读取和写入PDF文件、合并和拆分PDF文件、添加水印和加密等操作。

供自己以后查漏补缺,也欢迎同道朋友交流学习。

引言

上一篇文章,Python 如何处理 Word 文档,本篇主要介绍如何处理 PDF 文档,包括安装依赖库、读取和写入PDF文件、合并和拆分PDF文件、添加水印和加密等操作。

PyPDF2简介

PyPDF2Python 中一个非常流行的库,专门用于处理 PDF 文件,它具有以下特点:

  • 功能全面:提供了读取、写入、合并、拆分文件的功能,还能提取文本和元数据,满足大多数 PDF 处理需求。
  • API简洁API 设计简洁,易于理解和使用,使得开发者可以快速实现 PDF 文件的读取和写入操作。
  • 灵活性:允许开发者对 PDF 文件进行细粒度的操作,如单独处理每一页,或者对页面内容进行修改。

安装依赖库

pip install PyPDF2
# or
pip3 install PyPDF2

读取PDF文件

pdf-1

打开并读取PDF

  • 使用 open 打开文件读取二进制信息
  • 使用 PdfReader 读取文件信息
  • 使用 reader.pages 获取 PDF 文件的页数
  • 使用 reader.metadata 获取 PDF 文件的元数据
  • 使用 page.extract_text() 提取文本内容
import PyPDF2

# 打开PDF文件
with open('example.pdf', 'rb') as file:
  reader = PyPDF2.PdfReader(file)
  print("PDF文件成功打开")
  
  # 获取PDF文件的页数
  num_pages = len(reader.pages)
  print(f"PDF文件共有 {num_pages} 页")
    
  # 获取PDF的元数据
  print("PDF元数据:", reader.metadata)
  
  # 提取文本内容
  # 遍历每一页并提取文本
  text = ''
  for page_num in range(num_pages):
    page = reader.pages[page_num]
    text += page.extract_text() or ''  # 使用`or ''`避免None值
  print("提取的文本内容:")
  print(text)

写入PDF文件

  • 使用 PdfWriter 创建新的PDF文件对象
  • 使用 add_page 添加页面内容
  • 使用 write 写入文件
from PyPDF2 import PdfWriter, PdfReader

# 创建新的PDF文件对象
pdf_writer = PdfWriter()

# 读取老文件的pdf内容
old_pdf = open('example.pdf', 'rb')
pdf_rd = PdfReader(old_pdf)

# 添加页面内容
pdf_writer.add_page(pdf_rd.pages[0])

# 写入文件
with open('demo-1.pdf', 'wb') as pdf_file:
  pdf_writer.write(pdf_file)

合并和拆分PDF文件

合并PDF文件

合并 PDF 文件,无非就是使用 add_page 去添加页面,然后写入文件即可。

from PyPDF2 import PdfWriter, PdfReader

# 创建新的PDF文件对象
pdf_writer = PdfWriter()

# 打开多个PDF文件
pdf1 = PdfReader(open('demo-1.pdf', 'rb'))
pdf2 = PdfReader(open('example.pdf', 'rb'))

# 将每个PDF的所有页面添加到PdfWriter对象中
for page in pdf1.pages:
  pdf_writer.add_page(page)

for page in pdf2.pages:
  pdf_writer.add_page(page)

# 保存合并后的PDF文件
with open('merged_pdf.pdf', 'wb') as file:
  pdf_writer.write(file)

拆分PDF文件

拆分 PDF 文件,也是使用 add_page 分开去添加pdf文件,根据 pages 的数量来拆分。

from PyPDF2 import PdfWriter, PdfReader

# 打开PDF文件
with open('merged_pdf.pdf', 'rb') as file:
  reader = PdfReader(file)

  # 遍历PDF的每一页并将其保存为单独的文件
  for i, page in enumerate(reader.pages):
    pdf_writer = PdfWriter()
    pdf_writer.add_page(page)
        
    # 每个拆分的文件以页码命名
    with open(f'split_page_{i+1}.pdf', 'wb') as split_pdf:
      pdf_writer.write(split_pdf)

添加水印

使用 merge_page 方法,将水印页面合并到原页面上。

from PyPDF2 import PdfWriter, PdfReader

# 打开原PDF文件和水印PDF文件
reader = PdfReader("example.pdf")
watermark_reader = PdfReader("watermark.pdf")
watermark_page = watermark_reader.pages[0] # 假设水印在第一页

# 创建PDF写入对象
writer = PdfWriter()

# 遍历原PDF的每一页,并将水印页面合并上去
for page in reader.pages:
  page.merge_page(watermark_page)
  writer.add_page(page)

# 保存添加水印后的PDF文件
with open("watermarked_example.pdf", "wb") as file:
  writer.write(file)

加密PDF

使用 encrypt() 函数对 PDF 文件进行加密。

from PyPDF2 import PdfWriter, PdfReader

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

# 将PDF文件的每一页添加到写入对象中
for page in reader.pages:
  writer.add_page(page)

# 对PDF文件进行加密
writer.encrypt("123456")

# 保存加密后的PDF文件
with open("encrypted.pdf", "wb") as file:
  writer.write(file)

python学习专栏系列

练习代码库地址

python-study