文章目录
- 安装和初步使用
- 合并与拆分
- 页面编辑
- 加密解密
安装和初步使用
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就无需密码了。