Python给pdf制定权限加密

上一篇文章介绍了,为了保护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”密码进行操作。

稍后,我会验证并且正式数字对应的各个权限

权限分析请见:Python通过PyPDF2给pdf加密,权限分析_吃小狗的骨头的博客-CSDN博客

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
如果你想要读取一个加密PDF 文件,需要先解除加密限制。解除加密限制的方法取决于加密方式,这里介绍两种常见的加密方式的解除方法: 1. 用户密码加密 如果 PDF 文件是通过用户密码加密的,你需要知道密码才能解除加密限制。可以使用 PyPDF2 模块中的 PdfFileReader 类的 decrypt() 方法来解除加密限制。示例代码如下: ``` import PyPDF2 # 打开加密PDF 文件 pdf_file = open('encrypted.pdf', 'rb') # 创建一个 PDF 读取器对象 pdf_reader = PyPDF2.PdfFileReader(pdf_file) # 解密 PDF 文件 if pdf_reader.isEncrypted: password = input("请输入密码:") pdf_reader.decrypt(password) # 读取 PDF 文件内容 for page_num in range(pdf_reader.numPages): page = pdf_reader.getPage(page_num) print(page.extractText()) # 关闭 PDF 文件 pdf_file.close() ``` 在上述代码中,使用 isEncrypted 属性判断 PDF 文件是否加密,如果加密则需要输入密码解密。然后可以使用 getPage() 方法获取每一页的内容,使用 extractText() 方法提取文本内容。最后关闭 PDF 文件。 2. 打印密码加密 如果 PDF 文件是通过打印密码加密的,你需要知道密码才能解除加密限制。可以使用 PyPDF2 模块中的 PdfFileReader 类的 decrypt() 方法来解除加密限制。示例代码如下: ``` import PyPDF2 # 打开加密PDF 文件 pdf_file = open('encrypted.pdf', 'rb') # 创建一个 PDF 读取器对象 pdf_reader = PyPDF2.PdfFileReader(pdf_file) # 解密 PDF 文件 if pdf_reader.isEncrypted: password = input("请输入打印密码:") pdf_reader.decrypt(password) # 读取 PDF 文件内容 for page_num in range(pdf_reader.numPages): page = pdf_reader.getPage(page_num) print(page.extractText()) # 关闭 PDF 文件 pdf_file.close() ``` 在上述代码中,使用 isEncrypted 属性判断 PDF 文件是否加密,如果加密则需要输入打印密码解密。然后可以使用 getPage() 方法获取每一页的内容,使用 extractText() 方法提取文本内容。最后关闭 PDF 文件。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值