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

2023-12-19

安装和初步使用

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就无需密码了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • php中文乱码或html中文乱码

    参考gpt 一 在PHP中解决中文乱码问题的常见方案有以下几种 设置字符编码 在你的PHP代码中 可以使用 header 函数设置正确的字符编码 常见的字符编码是UTF 8 可以使用以下代码将页面的字符编码设置为UTF 8 header C
  • OpenCV4工业缺陷检测的六种方法【文末送书】

    目录 1 机器视觉 2 缺陷检测 三 工业上常见缺陷检测方法 方法一 基于简单二值图像分析实现划痕提取 效果如下 方法二 复杂背景下的图像缺陷分析 基于频域增强的方法实现缺陷检测 运行截图 方法三 复杂背景下的图像缺陷分析 基于空域增强实现
  • 机器人制作开源方案 | 智能水果分拣机器人

    作者 史振鹏 岳欣宇 仲祝伟 单位 邢台学院 指导老师 王承林 魏亚清 一 场景调研 智能水果分拣机器人是基于探索者设计的一款可搬运可分拣以及移动的一款轻便机器人 集成了语音控制 分拣 搬运 识别 抓取等功能 全部是使用探索者标准件 通过控
  • Flutter中key的作用

    flutter中key的作用 key的定义 Key Class官方介绍 A Key is an identifier for Widget s Element s and SemanticsNode s A new widget will
  • Nginx 配置 https 访问【图文教程】

    文章目录 第 1 步 安装 nginx 第 2 步 生成 ssl 证书 第 3 步 配置 ssl 第 4 步 访问 nginx 第 5 步 导入自签名证书 参考 目标 在 nginx 1 24 0 上配置 https 访问 https 证书
  • 坐标前后限制转点的坐标取值+网络流拆维拆点:agc031_e

    https vj imken moe contest 598718 problem J 观察到数据范围很小 但一个很重要的信息我们缺失了 就是珠宝的数量 所以我们考虑枚举珠宝的数量 k k k 对于横纵坐标什么至多至少的限制 比如 a i
  • 搭建动态网站之——基于Redhat8.6搭建Discuz论坛

    一 动态网站与静态网站区别 动态网站并不是指具有动画功能的网站 而是指网站内容可根据不同情况动态变更的网站 一般情况下动态网站通过数据库进行架构 动态网站除了要设计网页外 还要通过数据库和编程序来使网站具有更多自动的和高级的功能 动态网页
  • 神奇的幻方(2023.12.17)

    NOIP2017初赛 提高组 阅读程序写结果3 2 NOIP2017初赛 提高组 阅读程序写结果3 2 CSDN博客 小学生C 趣味编程 上机作业 每日一练 第6单元 数组 小学生C 趣味编程 上机作业 每日一练 第6单元 数组 2050
  • 回归预测 | MATLAB实现ILA-LSSVM【23年新算法】逻辑优化算法优化最小二乘支持向量机的数据回归预测 (多指标,多图)

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 代码获取 论文复现及科研仿真合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab完整代码及仿真定制内容点击 智能优化算法 神经网络预测 雷达通信
  • Hadoop3.x完全分布式模式下slaveDataNode节点未启动调整

    目录 前言 一 问题重现 1 查询Hadoop版本 2 集群启动Hadoop 二 问题分析 三 Hadoop3 x的集群配置 1 停止Hadoop服务 2 配置workers 3 从节点检测 4 WebUI监控 总结 前言 在大数据的世界里
  • YoloV8改进策略:ASF-YOLO,结合了空间和尺度特征在小目标和密集目标场景有效涨点

    摘要 本文提出了一种新型的Attentional Scale Sequence Fusion based You Only Look Once YOLO 框架 ASF YOLO 该框架结合了空间和尺度特征 以实现准确且快速的细胞实例分割 该
  • 基于springboot的酒店管理系统【论文、源码、开题报告】

    博主介绍 全网个人号和企业号 粉丝40W 每年辅导几千名大学生较好的完成毕业设计 专注计算机软件领域的项目研发 不断的进行新技术的项目实战 热门专栏 推荐订阅 订阅收藏起来 防止下次找不到 千套JAVA实战项目持续更新中 上百套小程序实战项
  • Autosar诊断——配置部分服务功能寻址不响应,抑制肯定响应

    Autosar诊断 简介和功能概述 Autosar诊断 DCM模块内的子模块 Autosar诊断 DSL Diagnostic Session Layer Autosar诊断 DSD Diagnostic Service Dispatche
  • vscode开发python环境配置

    前言 vscode作为一款好用的轻量级代码编辑器 不仅支持代码调试 而且还有丰富的插件库 可以说是免费好用 对于初学者来说用来写写python是再合适不过了 下面就推荐几款个人觉得还不错的插件 希望可以帮助大家更好地写代码 安装CPytho
  • 思幻二次元风格的工作室个人引导页源码

    思幻工作室个人引导页源码已经完成开发 该源码支持三端自适应 并且具备赞助功能 我们选择了当前点赞量最高的配色方案 打造了一个独特的二次元风格引导页 经过在美国服务器上进行的测试 效果令人满意 网页加载速度达到了全国深绿水平 在手机端 平板端
  • Velocity循环详解

    Velocity循环详解 大家好 我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3 0的小编 也是冬天不穿秋裤 天冷也要风度的程序猿 解锁Velocity循环 优雅处理数据展示 在Web开发中 数据展示是一个不可避免的话题 而Veloci
  • python 1200例——【2】求闰年

    在Python中 判断一个年份是否为闰年 Leap Year 的方法是 如果年份能被4整除但不能被100整除 那么它是一个闰年 如果年份能被400整除 那么它也是一个闰年 基于以上规则 我们可以编写一个Python函数来判断一个年份是否为闰
  • 精品Nodejs实现的“音乐盒”小程序的设计与实现-音乐播放器歌曲

    含文档 PPT 源码等 精品Nodejs实现的 音乐盒 小程序的设计与实现 包运行成功 该项目含有源码 文档 PPT 配套开发软件 软件安装教程 项目发布教程 包运行成功 软件开发环境及开发工具 操作系统 Windows 10 Window
  • 直排轮滑教程1

    准备活动及站立方法 1 轮滑起源于滑冰 2 开始运动之前最好做热身运动 刺激肌肉 使身体兴奋起来 3 戴护具 顺序是头盔 护肘 护膝 鞋 护掌 脱的顺序相反 4 起身 左腿立起 两手扶腿 两手撑 左腿蹬站立 5 原地站立方法三种 跟靠拢 两
  • 用Python编辑PDF文件:拆分合并、加密解密、页面编辑

    文章目录 安装和初步使用 合并与拆分 页面编辑 加密解密 安装和初步使用 PyPDF2 支持拆分 合并 页面旋转 添加水印 加密解密等操作 支持pip安装 过程很丝滑 pip install PyPDF2 PyPDF2提供了PdfFileR