前两天做了一个通过python里面的加密,如果想给pdf添加指定的权限,而不是全部锁死活着全部放开,这种就比较复杂。PyPDF2的官方文档里面,针对权限做了说明,其实就是使用二进制占位符进行权限判断的。
通过官方文档可以了解到,pdf一共通过32位的二进制进行权限判断,具体每个字段的意思如下:
上面的文档分别表示每个二进制的对应的意思,
1~2: 是指定字段,必须是0,这两个字段不需要操作
3: 打印权限
4: 表示除 6/9/11 位编辑功能以外的其他编辑功能,可以理解为 二级制第6/9/11 也是负责编辑的权限,只不过是编辑的权限范围不同,除了6/9/11三个之外的其他编辑权限,由第四位二进制控制(说实话,具体有权限,我也不太清除了)
5: 复制权限
6: 添加或修改文本注释,填写交互式表单字段,如果还设置了位4,则创建或修改交互式表单字段(纯百度翻译), 这里面就结合了第四个二进制权限设置
7~9:必须是1 ,不知道为啥
9:(第3版或更高版本)填写现有的交互式表单字段(包括签名字段),即使第6位是明确的(春百度翻译)
10:(第3版或更高版本)提取文本和图形(支持残疾用户访问或用于其他目的)
11: (第3版或更高版本)组装文档(插入、旋转或删除页面并创建书签或缩略图),即使是第4位这很清楚。
12: (第3版或更高版本)将文档打印到可以生成PDF内容的忠实数字副本。当该位清除(且设置了位3)时,打印仅限于外观的低级别表示,可能质量降低。
剩下的是: 全部都是1
剩下的权限就很好控制了
默认的全部密码授权的,是-3904对应二进制是: 1111 1111 1111 1111 1111 0000 1100 0000
从右往左,依次对应上面的权限,如果想开启对应的权限,则在指定的位置上,将0设置为1,然后在倒推出十进制,就可以了,如:
-3900: 只允许打印,其他的都不允许 1111 1111 1111 1111 1111 0000 1100 0100 重点看第三位
-3888: 允许复制,其他不允许 1111 1111 1111 1111 1111 0000 1101 0000 重点看第五位
-3884: 允许复制打印,其他不允许 1111 1111 1111 1111 1111 0000 1101 0100 看第三位和第五位
依次倒推其他权限即可
由于英语很烂,上面都是自己理解的,有不对的地方,还请指教