当前位置:网站首页>【pypdf2】合并PDF、旋转、缩放、裁剪、加密解密、添加水印
【pypdf2】合并PDF、旋转、缩放、裁剪、加密解密、添加水印
2022-08-10 23:50:00 【冰冷的希望】
1.合并PDF
pypdf2有一个PdfMerger对象用于合并多个PDF文件
使用方法很简单,只需要把需要合并的PDF文档的路径append进去即可
from PyPDF2 import PdfMerger
merger = PdfMerger()
# 按照顺序合并合并test1.pdf、test2.pdf、test3.pdf三个PDF文件
merger.append("test1.pdf")
merger.append("test2.pdf")
merger.append("test3.pdf")
merger.write("已合并.pdf") # 保存到硬盘
merger.close() # 不要忘了关闭句柄
如果你需要合并某些文档的某些页面,可以通过merge()方法,主要指定位置、合并的文档、文档范围三个参数,即指定从哪个文档插入哪些页面到哪个位置
from PyPDF2 import PdfReader, PdfWriter, PdfMerger
merger = PdfMerger()
pdf2 = open("test2.pdf", "rb")
pdf3 = open("test3.pdf", "rb")
# 添加test1的所有页面
merger.append("test1.pdf")
# 把test2的前三页插入到文档第一页
merger.merge(position=0, fileobj=pdf2, pages=(0, 3))
# 再把test3的第2、3页插入到文档当前第2页
merger.merge(position=1, fileobj=pdf3, pages=(1, 3))
merger.write("已合并.pdf")
merger.close()
2.旋转
PageObject对象有一个rotate()方法对自身进行旋转,但是旋转角度取值是0、90、270、180等,即90的倍数,正数是顺时针,负数是逆时针
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("test1.pdf")
writer = PdfWriter()
page = reader.getPage(0).rotate(90) # 顺时针旋转90度
writer.add_page(page)
writer.add_page(reader.pages[1])
writer.getPage(1).rotate(-90) # 逆时针旋转90度
with open("旋转.pdf", "wb") as f:
writer.write(f)
3.缩放
PageObject对象提供了第一个方法缩放页面,例如scale_by()可以指定一个浮点型的缩放因子进行等比缩放,例如缩放为原来的1.5倍
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("test1.pdf")
writer = PdfWriter()
page = reader.getPage(0)
# 查看页面尺寸
print(page.mediabox)
# 缩放为原来的1.5倍
page.scale_by(1.5)
print(page.mediabox)
writer.add_page(page)
with open("缩放.pdf", "wb") as f:
writer.write(f)
当然你也可以直接指定宽度和高度
...
page.scale_to(600, 1000)
...
4.裁剪
我们可以修改PageObject对象的mediabox的属性达到裁剪的目的
值得注意的是,页面左下角为坐标原点,向下为X轴正方向,向右为Y轴正方向
下面是裁剪页面左下角250x300的区域
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("test1.pdf")
writer = PdfWriter()
page = reader.getPage(1)
print(page.mediabox)
# 裁剪页面左下角250x300的区域
page.mediabox.upper_left = (0, 0)
page.mediabox.upper_right = (250, 0)
page.mediabox.lower_left = (0, 300)
page.mediabox.lower_right = (250, 300)
writer.add_page(page)
with open("裁剪.pdf", "wb") as f:
writer.write(f)
5.加密解密
PdfReader对象有提供encrypt()和decrypt()用于加密和解密文档,is_encrypted属性判断是否加密,如果文档加密了但没有界面后续访问就会报错。还需要注意的是尽管调用decrypt()进行解密,但密码不对它不会有任何提示,后续访问正常报错
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("test1.pdf")
writer = PdfWriter()
writer.add_page(reader.getPage(0))
# 加密
writer.encrypt("12345")
with open("加密.pdf", "wb") as f:
writer.write(f)
reader2 = PdfReader("加密.pdf")
# 解密
if reader2.is_encrypted:
reader2.decrypt("12345")
print(reader2.getPage(0).extract_text())
6.添加水印
PageObject对象有提供merge_page()用于合并页面,这个合并并不是上面那种多个页面按顺序排在一起,而是把多个页面叠加为一个页面,所以我们可以通过这种方法达到添加水印的目的。首先你要自己准备一个PDF页面当成是水印(可以使用Acrobat等软件制作),样式自己设置好,然后把它合并到需要添加水印的PDF的每一页即可
from PyPDF2 import PdfReader, PdfWriter
# 打开准好好的水印PDF并读取水印页面
watermark_reader = PdfReader("watermark.pdf")
watermark_page = watermark_reader.getPage(0)
# 读取需要被添加水印的PDF
reader = PdfReader("test1.pdf")
writer = PdfWriter()
# 遍历所有页面
for page in reader.pages:
# 合并水印页面
page.merge_page(watermark_page)
writer.add_page(page)
with open("水印.pdf", "wb") as f:
writer.write(f)
边栏推荐
- 图片懒加载(纯手写)
- [21天学习挑战赛——内核笔记](五)——devmem读写寄存器调试
- NOR FLASH闪存芯片ID应用之软件保护场景
- Summary of Confused Knowledge Points for "High Items" in the Soft Examination in the Second Half of 2022 (2)
- 缓存知识总结
- SQL注入基础
- iNFTnews | In the Web3 era, users will have data autonomy
- 7. yaml
- IEEE的论文哪里可以下载?
- I caught a 10-year-old Ali test developer, and after talking about it, I made a lot of money...
猜你喜欢
随机推荐
线上突然查询变慢怎么核查
sqlmap combined with dnslog fast injection
iNFTnews | In the Web3 era, users will have data autonomy
SQL injection base - order by injection, limit, wide byte
[C] the C language program design, dynamic address book (order)
10. 接收参数相关注解
【pypdf2】安装、读取和保存、访问页面、获取文本、读写元数据、加密解密
UOJ#749-[UNR #6]稳健型选手【贪心,分治,主席树】
iNFTnews | Web3时代,用户将拥有数据自主权
分布式.性能优化
16. 文件上传
[Excel知识技能] 将数值格式数字转换为文本格式
"NIO Cup" 2022 Nioke Summer Multi-School Training Camp 2 DGHJKL Problem Solution
10. Notes on receiving parameters
12. 处理 JSON
7. yaml
如何做专利挖掘,关键是寻找专利点,其实并不太难
CF1534F2-Falling Sand (Hard Version)
Summary of Confused Knowledge Points for "High Items" in the Soft Examination in the Second Half of 2022 (2)
How to quickly grasp industry opportunities and introduce new ones more efficiently is an important proposition