Python操作PDF

一、PDF简介

PDF是Portable Document Format的缩写,这类文件通常使用.pdf作为其扩展名。在日常开发工作中,最容易遇到的就是从PDF中读取文本内容以及用已有的内容生成PDF文档这两个任务。

在Python中,可以使用名为PyPDF2的三方库来读取PDF文件,可以使用下面的命令来安装它。

安装最新版本

pip install PyPDF2

image-20231031103255124

安装指定版本

pip install PyPDF2==2.3.1 

二、从PDF中提取文本和加密PDF文件

2.1 提取文本

PyPDF2没有办法从PDF文档中提取图像、图表或其他媒体,但它可以提取文本,并将其返回为Python字符串。

  • 导入包
import PyPDF2
  • 创建读取文件的对象
reader = PyPDF2.PdfReader(r"data/XGBoost.pdf")
  • 获取指定页,结果返回一个字典
page = reader.pages[0]
print(page)
  • 获取指定页的文本内容
text = page.extract_text()
print(text)

2.2 加密pdf文件

使用PyPDF2中的PdfWrite对象可以为PDF文档加密,如果需要给一系列的PDF文档设置统一的访问口令,使用Python程序来处理就会非常的方便。

加密pdf文件会创建新的对象

  • 导入包
import PyPDF2
  • 创建读取文件的对象
reader = PyPDF2.PdfReader(r"data/XGBoost.pdf")
  • 创建写入文件的对象
writer = PyPDF2.PdfWriter()
  • 获取已知文件的每一页,添加到新的文件对象中
for i in range(len(reader.pages)):
    writer.add_page(reader.pages[i])
  • 给PDF文件加密,设置密码
writer.encrypt("1234")
  • 保存新创建的文件
with open(r"data/XGBoost-加密.pdf", "wb") as f:
    writer.write(f)

三、旋转和创建空白pdf文件

3.1 旋转页

  • 导入包
import PyPDF2
  • 创建读取文件的对象
reader = PyPDF2.PdfReader(r"data/XGBoost.pdf")
  • 创建写入文件的对象
writer = PyPDF2.PdfWriter()
  • 获取已知文件的每一页,添加到新的文件对象中
for i in range(len(reader.pages)):
    # 获取每一页的对象
    page = reader.pages[i]
    if i % 2 == 0:
        # 偶数页顺时针选择90°
        page.rotate(90)
    else:
        # 奇数页顺时针选择90°
        page.rotate(-90)
    writer.add_page(reader.pages[i])
  • 保存新创建的文件
with open(r"data/XGBoost-旋转.pdf", "wb") as f:
    writer.write(f)

3.2 创建空白页

import PyPDF2

# 1.旋转
# 创建读取文件的对象
reader = PyPDF2.PdfReader(r"data/XGBoost.pdf")
# 创建写入文件的对象
writer = PyPDF2.PdfWriter()

for i in range(len(reader.pages)):
    # 获取每一页的对象
    page = reader.pages[i]
    if i % 2 == 0:
        # 顺时针旋转90
        page.rotate(90)
    else:
        # 逆时针旋转90
        page.rotate(-90)
    writer.add_page(page)

# 2.创建空白页
blank_page = writer.add_blank_page()

with open(r"data/XGBoost-空白.pdf", 'wb') as f:
    writer.write(f)

四、批量添加水印

​ 给文件添加水印,需要准备两个文件,一个需要添加水印的文件XGBoost.pdf,一个是水印文件watermark.pdf。通过merge_page方法将两个PDF页面进行叠加,通过这个操作,我们很容易实现给PDF文件添加水印的功能。

​ 同样,该操作会创建一个新的对象

# 导入包
import PyPDF2

# 创建读取文件对象
# 原文件对象
src_reader = PyPDF2.PdfReader(r"data/XGBoost.pdf")
# 水印文件对象
water_reader = PyPDF2.PdfReader(r"data/watermark.pdf")

# 创建写入文件对象
writer = PyPDF2.PdfWriter()

# 获取水印文件的page对象
water_page = water_reader.pages[0]
# 遍历需要添加水印的原文件的每一页对象,将其和水印文件的页对象进行合并
for i in range(len(src_reader.pages)):
    src_page = src_reader.pages[i]
    # 合并
    src_page.merge_page(water_page)
    # 添加到writer文件对象中
    writer.add_page(src_page)
    
# 保存文件
with open(r"data/XGBoost-水印.pdf", "wb") as f:
    writer.write(f)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巧克力配酸奶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值