用Python编辑PDF文件:拆分合并、加密解密、页面编辑

news2024/11/25 22:37:09

文章目录

    • 安装和初步使用
    • 合并与拆分
    • 页面编辑
    • 加密解密

安装和初步使用

PyPDF2支持拆分、合并、页面旋转、添加水印、加密解密等操作。支持pip安装,过程很丝滑。

pip install PyPDF2

PyPDF2提供了PdfFileReader类,可用于读取PDF文件,其metadata中存放了PDF的元数据。

from pprint import pprint
from  PyPDF2 import PdfReader
path = "test.pdf"
pdf = PdfReader(path)
pprint(pdf.metadata)
''' 返回值如下
{'/Author': 'caoyu',
 '/CreationDate': "D:20231211141122+08'00'",
 '/Creator': 'Microsoft® Word 2016',
 '/ModDate': "D:20231211141122+08'00'",
 '/Producer': 'iText 2.1.7 by 1T3XT; modified using iText® 5.5.13 ©2000-2018 '
              'iText Group NV (AGPL-version)'}
'''

PdfReader对象的属性pages,即页面的集合,通过统计其page的格式,即可知道pdf文档的总页数

print(len(pdf.pages))   # 返回1,说明只有1页

合并与拆分

pdfMerger是用于合并PDF的类,也十分易用,只需创建对象,并将准备合并的pdf对象逐一加入其中,再行保存,示例如下。

from  PyPDF2 import PdfMerger
merger=PyPDF2.PdfMerger()

for i in range(5):
    merger.append(PdfReader(f))

merger.write('merge.pdf')

接下来打开merge.pdf,查看其页码,可见的确合并了5页。

m = PdfReader('merge.pdf')
len(m.pages)    # 5

接下来,再对这

from  PyPDF2 import PdfWriter

for i,p in enumerate(m.pages):
    w = PdfWriter()
    w.add_page(p)
    w.write(f"{i}.pdf")

在当前路径下,多出了5个数字命名的pdf文件。

页面编辑

旋转和添加水印都相当于是对单个页面进行操作,故而其旋转操作是页面对象的内置方法rotate,默认为顺时针旋转,示例如下

w = PdfWriter()
p1 = pdf.pages[0].rotate(90)
w.add_page(p1)
p2 = pdf.pages[0].rotate(-90)
w.add_page(p2)
w.write('rotate.pdf')

page中提供了合并页面的方法mergePage,可用于添加水印,这并不让人费解,即可以把其中一个PDF文件作为水印,其添加方式如下

stamp = PdfReader("bg.pdf").pages[0]
w = PdfWriter(clone_from="test.pdf")
for page in w.pages:
    page.merge_page(stamp, over=False)

writer.write("out.pdf")

其中,over为False,表示水印将在文本的下方,否则在其上方。

加密解密

通过encrypt函数可对PDF文件加密,decrypt则用于解密。

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

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

writer.encrypt("123456")
writer.write("encrypted.pdf")

这时再打开encrypt.pdf,就需要输入密码,

在这里插入图片描述

脱密过程如下

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

if reader.is_encrypted:
    reader.decrypt("123456")

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

writer.write("decrypted.pdf")

这回保存的decrypted.pdf就无需密码了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1321114.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用户行为分析遇到的问题-ubantu16,hadoop3.1.3

用户行为分析传送门 我的版本 ubantu16 hadoop 3.1.3 habse 2.2.2 hive3.1.3 zookeeper3.8.3 sqoop 1.46/1.47 我sqoop把MySQL数据往hbase导数据时候有问题 重磅:大数据课程实验案例:网站用户行为分析(免费共享) 用户行为分析-小…

使用ffmpeg将图片合成为mp4

首先在在图片文件夹输入cmd 这里确保已经安装ffmpeg并配置好环境变量。 然后这是我的文件夹目录: 将21张图片合成为mp4视频 这里使用如下命令: ffmpeg -framerate 1 -start_number 0 -i %d.png -c:v libx264 -pix_fmt yuv420p output.mp4 -framerat…

rabbitmq-常见七种消息队列-控制台界面管理-python-实现简单访问

文章目录 1.消息的基本概念1.1.生产者和消费者1.2.消息队列(Queue)1.3.交换机(Exchange)1.4.消息确认 2.七种队列模式2.1.简单模式(Hello World)2.2.工作队列模式(Work queues)2.3.发布订阅模式(Publish/Subscribe)2.4.路由模式(Routing)2.5.主题模式(Topics)2.6.远程过程调用(…

windows下wsl(ubuntu)ldconfig报错

错误 sudo ldconfig /sbin/ldconfig.real: Cant link /usr/lib/wsl/lib/libnvoptix_loader.so.1 to libnvoptix.so.1 /sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link解决: 处理 sudo ldconfig 报错 libcuda.so.1 is not a symbolic …

GZ015 机器人系统集成应用技术样题8-学生赛

2023年全国职业院校技能大赛 高职组“机器人系统集成应用技术”赛项 竞赛任务书(学生赛) 样题8 选手须知: 本任务书共 25页,如出现任务书缺页、字迹不清等问题,请及时向裁判示意,并进行任务书的更换。参赛队…

RPC(3):HttpClient实现RPC之GET请求

1HttpClient简介 在JDK中java.net包下提供了用户HTTP访问的基本功能,但是它缺少灵活性或许多应用所需要的功能。 HttpClient起初是Apache Jakarta Common 的子项目。用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 H…

3.2 内容管理模块 - 课程分类、新增课程、修改课程

内容管理模块-课程分类、新增课程、修改课程 文章目录 内容管理模块-课程分类、新增课程、修改课程一、课程分类1.1 课程分类表1.2 查询树形结构1.2.1 表自连接1.2.2 SQL递归 1.3 Mapper1.4 Service1.5 Controller1.6 效果图 二、添加课程2.1 需求分析2.2 数据表2.2.1 课程基础…

【linux】SSH终端Putty配置:文件上传/下载、显示中文字体、自动登录

文章目录 写在前面putty上传/下载文件1. 下载2. 解压和配置3. 使用sz/rz3.1 下载文件:sz3.2 上传文件:rz 显示中文字体1. 下载合适的字体2. 解压和安装3. putty配置 putty自动登录1. putty配置2. putty快捷方式配置3. 使用putty 写在后面 写在前面 一篇博客介绍了12种SSH终端工…

福德植保无人机工厂:创新科技与绿色农业的完美结合

亲爱的读者们,欢迎来到福德植保无人机工厂的世界。这里,科技与农业的完美结合为我们描绘出一幅未来农业的新篇章。福德植保无人机工厂作为行业的领军者,以其领先的无人机技术,创新的理念,为我们展示了一种全新的农业服…

C++共享和保护——(4)保护共享数据

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 一滴汗珠万粒粮,万粒汗珠谷…

Scala多线程爬虫程序的数据可视化与分析实践

一、Scala简介 Scala是一种多种类型的编程语言,结合了针对对象编程和函数式编程的功能。它运行在Java虚拟机上,具有强大的运算能力和丰富的库支持。Scala常用于大数据处理、并发编程和Web应用程序开发。其灵活性和高效性编程成为编写多线程爬虫程序的理…

SQL进阶理论篇(十二):InnoDB中的MVCC是如何实现的?

文章目录 简介事务版本号行记录的隐藏列Undo LogRead View的工作流程总结参考文献 简介 在不同的DBMS里,MVCC的实现机制是不同的。本节我们会以InnoDB举例,讲解InnoDB里MVCC的实现机制。 我们需要掌握这么几个概念: 事务版本号行记录的隐藏…

02.微服务组件 Eureka注册中心

1.Eureka注册中心 服务提供者与消费者: 服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)一个服务是消费者还是提供者&#xff…

Apache Flink(十五):Flink任务提交模式

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

响应式布局2:手写响应式导航栏(BootStrap实现以及原生实现)

1.响应式导航栏介绍 响应式导航栏是一种在不同设备和屏幕尺寸下自适应布局和显示的导航栏。它可以根据用户所使用的设备(如桌面电脑、平板电脑或手机)自动调整其外观和交互方式,以提供更好的用户体验。 pc端: 手机端&#xff1a…

网络编程『socket套接字 ‖ 简易UDP网络程序』

🔭个人主页: 北 海 🛜所属专栏: Linux学习之旅、神奇的网络世界 💻操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌤️前言🌦️正文1.预备知识1.1.IP地址1.2.端口号1.3.端口号与进…

【具身智能评估6】Habitat 3.0: A Co-Habitat for Humans, Avatars and Robots

论文标题:Habitat 3.0: A Co-Habitat for Humans, Avatars and Robots 论文作者:Xavier Puig, Eric Undersander, Andrew Szot, Mikael Dallaire Cote, Tsung-Yen Yang, Ruslan Partsey, Ruta Desai, Alexander William Clegg, Michal Hlavac, So Yeon M…

出国旅游需要注意些什么

出国旅游是一种令人兴奋、令人期待的经历。然而,在进行这种经历之前,有几件事情是需要注意的。本文将为您介绍出国旅游需要注意的一些重要事项。首先,为了确保您的出国旅行顺利进行,您应该提前办理好您的签证和护照。不同国家对于…

JAVA主流日志框架梳理学习及使用

前言:目前市面上有挺多JAVA的日志框架,比如JUL(JDK自带的日志框架),Log4j,Logback,Log4j2等,有人可能有疑问说还有slf4j,不过slf4j不是一种日志框架的具体实现,而是一种日志门面(日志门面可以理解为是一种统…

Convolutional Neural Network(CNN)——卷积神经网络

1.NN的局限性 拓展性差 NN的计算量大性能差,不利于在不同规模的数据集上有效运行若输入维度发生变化,需要修改并重新训练网络容易过拟合 全连接导致参数量特别多,容易过拟合如果增加更多层,参数量会翻倍无法有效利用局部特征 输入…