上一篇文章介绍了,为了保护pdf,使用python给pdf添加密码。但是,上锁之后,让客户可以看,但是不能随意复制、打印之类的话,还是不能满足的。因为加密之后,所有的功能权限都进行了加密。就是一个开关。如果我想让客户只能看,但是不能复制,能打印,那么这个需求就不能满足。为了让人看,你得提供密码,但是密码给了,那么用户就能继续复制。所以,我现在想结合加密的两个密码,进行分别授权。
这里面需要对PyPDF2进行一些源码的修改。
找到源码,如下图:
然后找到
给方法添加了一个参数,然后在后面进行单独授权,如下图:
将P = -1 指定授权,改为 传递的参数。
这样,我的加密代码就会出现如下情况:
from PyPDF2 import PdfFileWriter, PdfFileReader
path = r'C:/Users/TF/Desktop'
pdf_reader = PdfFileReader(path + r'\seczlsc.pdf')
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()):
pdf_writer.addPage(pdf_reader.getPage(page))
pdf_writer.encrypt("", -3900, "123456") # 设置密码为 a123
with open(path + r'\zlsc.pdf', 'wb') as out:
pdf_writer.write(out)
这样,一共三个参数, 第一个和第三个是密码, 第二个则是权限。
-3904: 表示所有的权限都得需要密码,如不能编辑、复制、打印、注释等功能
-3900: 表示只能够打印,其他的都不能
除此之外,还有其他的权限。如果想要授权操作,则可以使用后面的“123456”密码进行操作。
稍后,我会验证并且正式数字对应的各个权限