基于python对pdf文件进行加密等操作

利用python对pdf文件进行操作

读取pdf-源码

import PyPDF2
# 读取pdf格式的文件
reader = PyPDF2.PdfFileReader('示例文件/aaa.pdf')
print(reader)

# 读取指定页面的文件
page = reader.getPage(0)
# 输出当前页面的文本数据
print(page.extractText())

读取pdf-源码解析

这段代码使用了PyPDF2库来读取和处理PDF文件。以下是对这段代码的详细分析:

1. 导入库

import PyPDF2

这行代码导入了PyPDF2库,该库提供了处理PDF文件的功能。

2. 读取PDF文件

reader = PyPDF2.PdfFileReader('示例文件/aaa.pdf')
print(reader)
  • PyPDF2.PdfFileReader('示例文件/aaa.pdf'):创建一个PdfFileReader对象,用于读取指定的PDF文件。这里的文件路径是'示例文件/aaa.pdf'

  • print(reader):打印reader对象。这个对象包含了PDF文件的元数据和页面信息。

3. 读取指定页面

page = reader.getPage(0)
  • reader.getPage(0):从PDF文件中获取第一页(索引为0)。getPage方法返回一个PageObject对象,表示PDF文件中的一页。

4. 提取并输出文本数据

print(page.extractText())
  • page.extractText():从当前页面(page对象)中提取文本数据。这个方法会尝试解析页面中的文本并返回一个字符串。

  • print(page.extractText()):打印提取到的文本数据。

代码执行流程

  1. 导入库 :导入PyPDF2库。

  2. 创建读取器对象 :使用PdfFileReader读取指定的PDF文件。

  3. 获取页面对象 :使用getPage方法获取PDF文件的第一页。

  4. 提取文本 :使用extractText方法从页面对象中提取文本数据。

  5. 输出文本:打印提取到的文本数据。

注意事项

  • 确保PDF文件路径正确,并且文件存在。

  • PyPDF2库可能无法完美提取所有PDF文件中的文本,特别是那些包含复杂格式或图像的PDF文件。

  • 如果PDF文件受密码保护,需要先解密文件才能读取内容。

示例输出

假设PDF文件'示例文件/aaa.pdf'的第一页包含文本"Hello, World!",那么代码的输出将是:

<PyPDF2.pdf.PageObject object at 0x...>
Hello, World!

其中<PyPDF2.pdf.PageObject object at 0x...>PageObject对象的表示,后面的文本是提取到的内容。

通过这段代码,你可以读取PDF文件的指定页面并提取其中的文本内容。

旋转和创建空白pdf-源码

import PyPDF2

# 创建读取pdf文件的对象
reader = PyPDF2.PdfFileReader(r'示例文件/aaa.pdf')
# 创建写入pdf文件的对象
writer = PyPDF2.PdfFileWriter()
# print(reader,writer)

# 获取pdf文件中所有页码
# print(reader.numPages)

# 对pdf文件中的所有页码进行遍历
for page_num in range(reader.numPages):
    # print(page_num)
    # 获取当前页面对象
    current_page = reader.getPage(page_num)
    # 若是奇数页顺时针旋转90°
    if page_num % 2 == 0:
        current_page.rotateClockwise(90)
    else:
        # 若是奇数页逆时针旋转90°
        current_page.rotateCounterClockwise(90)
    writer.addPage(current_page)

# 添加空白页,并且旋转90°
page = writer.addBlankPage()
page.rotateClockwise(90)

# 通过writer对象里面的write方法,将pdf文件做的调整保存到新的文件中
with open(r'示例文件/旋转和创建空白pdf文件.pdf', 'wb') as file:
    writer.write(file)

旋转和创建空白pdf-源码解析

这段代码使用了PyPDF2库来读取一个PDF文件,对每一页进行旋转操作,并添加一个空白页,最后将修改后的内容保存到一个新的PDF文件中。以下是对这段代码的详细解析:

1. 导入库

import PyPDF2

这行代码导入了PyPDF2库,该库提供了处理PDF文件的功能。

2. 创建读取和写入PDF文件的对象

reader = PyPDF2.PdfFileReader(r'示例文件/aaa.pdf')
writer = PyPDF2.PdfFileWriter()
  • reader = PyPDF2.PdfFileReader(r'示例文件/aaa.pdf'):创建一个PdfFileReader对象,用于读取指定的PDF文件。这里的文件路径是'示例文件/aaa.pdf'

  • writer = PyPDF2.PdfFileWriter():创建一个PdfFileWriter对象,用于写入新的PDF文件。

3. 获取PDF文件中所有页码

num_pages = reader.numPages
  • reader.numPages:获取PDF文件中的总页数。

4. 对PDF文件中的所有页码进行遍历

for page_num in range(num_pages):
    current_page = reader.getPage(page_num)
    if page_num % 2 == 0:
        current_page.rotateClockwise(90)
    else:
        current_page.rotateCounterClockwise(90)
    writer.addPage(current_page)
  • for page_num in range(num_pages):遍历PDF文件中的每一页。

  • current_page = reader.getPage(page_num):获取当前页码对应的页面对象。

  • if page_num % 2 == 0:判断当前页码是否为偶数。

    • current_page.rotateClockwise(90):如果是偶数页,顺时针旋转90度。

    • current_page.rotateCounterClockwise(90):如果是奇数页,逆时针旋转90度。

  • writer.addPage(current_page):将旋转后的页面添加到writer对象中。

5. 添加空白页并旋转

page = writer.addBlankPage()
page.rotateClockwise(90)
  • page = writer.addBlankPage():在writer对象中添加一个空白页。

  • page.rotateClockwise(90):将空白页顺时针旋转90度。

6. 保存修改后的PDF文件

with open(r'示例文件/旋转和创建空白pdf文件.pdf', 'wb') as file:
    writer.write(file)
  • with open(r'示例文件/旋转和创建空白pdf文件.pdf', 'wb') as file:以二进制写模式打开一个新文件,用于保存修改后的PDF文件。

  • writer.write(file):将writer对象中的内容写入到新文件中。

代码执行流程

  1. 导入库 :导入PyPDF2库。

  2. 创建读取器和写入器对象:分别创建用于读取和写入PDF文件的对象。

  3. 获取总页数:获取PDF文件中的总页数。

  4. 遍历每一页:对每一页进行旋转操作,并将旋转后的页面添加到写入器对象中。

  5. 添加空白页并旋转:在写入器对象中添加一个空白页,并将其旋转90度。

  6. 保存文件:将修改后的内容保存到一个新的PDF文件中。

示例输出

假设原始PDF文件'示例文件/aaa.pdf'有3页,经过上述代码处理后,将会生成一个新的PDF文件'示例文件/旋转和创建空白pdf文件.pdf',其中:

  • 第1页(原第1页)顺时针旋转90度。

  • 第2页(原第2页)逆时针旋转90度。

  • 第3页(原第3页)顺时针旋转90度。

  • 添加了一个空白页,并且该空白页顺时针旋转90度。

通过这段代码,你可以对PDF文件的每一页进行旋转操作,并添加一个空白页,最后将修改后的内容保存到一个新的PDF文件中。

对pdf文件加密-源码

import PyPDF2

# 创建读取pdf文件对象
reader = PyPDF2.PdfFileReader('示例文件/旋转和创建空白pdf文件.pdf')

# 创建写入pdf文件的对象
writer = PyPDF2.PdfFileWriter()

for page_num in range(reader.numPages):
    # 将原文的每一页追加到writer对象中
    writer.addPage(reader.getPage(page_num))

# 给writer对象设置密码
writer.encrypt("123456")
# 将加密后的文件写入到新文件中
with open(r'示例文件/旋转和创建空白pdf文件_加密.pdf', 'wb') as file:
    writer.write(file)

对pdf文件加密-源码解析

这段代码使用了PyPDF2库来读取一个已有的PDF文件,将其内容复制到一个新的PDF文件中,并给新的PDF文件设置密码进行加密,最后将加密后的文件保存到新的文件中。以下是对这段代码的详细解析:

1. 导入库

import PyPDF2

这行代码导入了PyPDF2库,该库提供了处理PDF文件的功能。

2. 创建读取PDF文件对象

reader = PyPDF2.PdfFileReader('示例文件/旋转和创建空白pdf文件.pdf')
  • reader = PyPDF2.PdfFileReader('示例文件/旋转和创建空白pdf文件.pdf'):创建一个PdfFileReader对象,用于读取指定的PDF文件。这里的文件路径是'示例文件/旋转和创建空白pdf文件.pdf'

3. 创建写入PDF文件的对象

writer = PyPDF2.PdfFileWriter()
  • writer = PyPDF2.PdfFileWriter():创建一个PdfFileWriter对象,用于写入新的PDF文件。

4. 遍历原文的每一页并追加到writer对象中

for page_num in range(reader.numPages):
    writer.addPage(reader.getPage(page_num))
  • for page_num in range(reader.numPages):遍历PDF文件中的每一页。

  • writer.addPage(reader.getPage(page_num)):将当前页码对应的页面对象添加到writer对象中。

5. 给writer对象设置密码

writer.encrypt("123456")
  • writer.encrypt("123456"):给writer对象设置密码,密码为"123456"。加密后的PDF文件需要使用这个密码才能打开。

6. 将加密后的文件写入到新文件中

with open(r'示例文件/旋转和创建空白pdf文件_加密.pdf', 'wb') as file:
    writer.write(file)
  • with open(r'示例文件/旋转和创建空白pdf文件_加密.pdf', 'wb') as file:以二进制写模式打开一个新文件,用于保存加密后的PDF文件。

  • writer.write(file):将writer对象中的内容写入到新文件中。

代码执行流程

  1. 导入库 :导入PyPDF2库。

  2. 创建读取器对象:创建用于读取PDF文件的对象。

  3. 创建写入器对象:创建用于写入新的PDF文件的对象。

  4. 遍历每一页:将原文的每一页追加到写入器对象中。

  5. 设置密码:给写入器对象设置密码。

  6. 保存文件:将加密后的内容保存到一个新的PDF文件中。

示例输出

假设原始PDF文件'示例文件/旋转和创建空白pdf文件.pdf'有3页,经过上述代码处理后,将会生成一个新的PDF文件'示例文件/旋转和创建空白pdf文件_加密.pdf',其中:

  • 内容与原始PDF文件相同。

  • 文件被加密,需要使用密码"123456"才能打开。

通过这段代码,你可以读取一个PDF文件的内容,将其复制到一个新的PDF文件中,并给新的PDF文件设置密码进行加密,最后将加密后的文件保存到新的文件中。

对pdf文件添加水印-源码

import PyPDF2

# 读取源文件
reader = PyPDF2.PdfFileReader(r'示例文件/aaa.pdf')

# 读取水印文件
water = PyPDF2.PdfFileReader(r'示例文件/watermark.pdf')

# 写入pdf文件对象
writer = PyPDF2.PdfFileWriter()

# 获取水印页
water_page = water.getPage(0)

# 通过循环给原文件添加水印
for page_num in range(reader.numPages):
    # 获取当前页对象
    current_page = reader.getPage(page_num)
    # 将源文件的每一页与水印页合并
    current_page.mergePage(water_page)
    writer.addPage(current_page)

# 将添加完水印页的文件写入到新文件当中
with open(r'示例文件/aaa.pdf','wb') as file:
    writer.write(file)

对pdf文件添加水印-源码解析

这段代码使用了PyPDF2库来读取一个源PDF文件和一个水印PDF文件,然后将水印添加到源文件的每一页,最后将添加完水印的文件保存到一个新的文件中。以下是对这段代码的详细解析:

1. 导入库

import PyPDF2

这行代码导入了PyPDF2库,该库提供了处理PDF文件的功能。

2. 读取源文件和水印文件

reader = PyPDF2.PdfFileReader(r'示例文件/aaa.pdf')
water = PyPDF2.PdfFileReader(r'示例文件/watermark.pdf')
  • reader = PyPDF2.PdfFileReader(r'示例文件/aaa.pdf'):创建一个PdfFileReader对象,用于读取源PDF文件。这里的文件路径是'示例文件/aaa.pdf'

  • water = PyPDF2.PdfFileReader(r'示例文件/watermark.pdf'):创建一个PdfFileReader对象,用于读取水印PDF文件。这里的文件路径是'示例文件/watermark.pdf'

3. 创建写入PDF文件的对象

writer = PyPDF2.PdfFileWriter()
  • writer = PyPDF2.PdfFileWriter():创建一个PdfFileWriter对象,用于写入新的PDF文件。

4. 获取水印页

water_page = water.getPage(0)
  • water_page = water.getPage(0):获取水印PDF文件的第一页(索引为0),作为水印页。

5. 通过循环给原文件添加水印

for page_num in range(reader.numPages):
    current_page = reader.getPage(page_num)
    current_page.mergePage(water_page)
    writer.addPage(current_page)
  • for page_num in range(reader.num页面):遍历源PDF文件中的每一页。

  • current_page = reader.getPage(page_num):获取当前页码对应的页面对象。

  • current_page.mergePage(water_page):将水印页合并到当前页上。

  • writer.addPage(current_page):将合并了水印的当前页添加到writer对象中。

6. 将添加完水印页的文件写入到新文件当中

with open(r'示例文件/aaa.pdf','wb') as file:
    writer.write(file)
  • with open(r'示例文件/aaa.pdf','wb') as file:以二进制写模式打开一个新文件,用于保存添加完水印的PDF文件。

  • writer.write(file):将writer对象中的内容写入到新文件中。

代码执行流程

  1. 导入库 :导入PyPDF2库。

  2. 读取源文件和水印文件:分别创建用于读取源PDF文件和水印PDF文件的对象。

  3. 创建写入器对象:创建用于写入新的PDF文件的对象。

  4. 获取水印页:获取水印PDF文件的第一页。

  5. 遍历每一页并添加水印:将水印页合并到源PDF文件的每一页上,并将合并后的页面添加到写入器对象中。

  6. 保存文件:将添加完水印的文件保存到一个新的文件中。

示例输出

假设源PDF文件'示例文件/aaa.pdf'有3页,水印PDF文件'示例文件/watermark.pdf'有1页,经过上述代码处理后,将会生成一个新的PDF文件'示例文件/aaa.pdf',其中:

  • 每一页都包含了水印。

  • 水印的位置和大小取决于水印页的内容和源页的大小。

通过这段代码,你可以读取一个源PDF文件和一个水印PDF文件,将水印添加到源文件的每一页,最后将添加完水印的文件保存到一个新的文件中。

相关推荐
东方佑13 分钟前
samout 新设计参数共享解决初始loss 大的问题
pytorch·python·深度学习
阿落ovo1 小时前
访问控制列表ACL
java·运维·服务器·网络·数据库·华为·智能路由器
困顿小狗1 小时前
vue2 项目webpack 4升5
前端·webpack
sleeppingfrog1 小时前
vue3中自定义组件的双向绑定
前端·javascript·vue.js
莫名其妙小饼干2 小时前
社区生活超市系统|Java|SSM|JSP|
java·开发语言·maven·mssql
Domain-zhuo2 小时前
uniapp 应用的生命周期、页面的生命周期、组件的生命周期
前端·javascript·vue.js·前端框架·uni-app·html·ecmascript
旅行中的伊蕾娜2 小时前
uniapp炫酷导航按钮及轮播指示器组件
前端·javascript·vue.js·微信小程序·uni-app
Liberty_yes2 小时前
uniapp navigateTo、redirectTo、reLaunch等页面路由跳转方法的区别
前端·uni-app
凡人的AI工具箱2 小时前
每天40分玩转Django:Django中间件
开发语言·数据库·后端·python·中间件·django
山山而川粤2 小时前
社区生活超市系统|Java|SSM|JSP|
java·开发语言·后端·学习·mysql