【问题描述】用Python如何为PDF文档加密并设置权限控制呢?
【小千解答】生成PDF时加密借助reportlab库,对已有的PDF加密借助PyPDF2库。
设置新PDF,代码如下:
from reportlab.pdfgen import canvas
from reportlab.lib import pdfencrypt
enc = pdfencrypt.StandardEncryption('123456','xqoffice.cn',canPrint=0)
cvs = canvas.Canvas(r'd:\xqoffice\report.pdf',encrypt=enc)
cvs.drawString(100,800,'report by xqoffice.cn')
cvs.showPage()
cvs.save()效果:
注:reportlab.lib.pdfencrypt.StandardEncryption类提供的控制权限参数如下:

设置已有PDF,代码如下:
from PyPDF2 import PdfFileReader,PdfFileWriter
xqfile = r'd:\xqoffice\体检报告-小千.pdf'
pdf_reader = PdfFileReader(xqfile)
pdf_writer = PdfFileWriter()
for pagenum in range(pdf_reader.getNumPages()):
pageobj = pdf_reader.getPage(pagenum)
pdf_writer.addPage(pageobj)
pdf_writer.encrypt('123456','xqoffice.cn',permitval=-44)
with open(xqfile,'wb') as xqpdf:
pdf_writer.write(xqpdf)效果:

注:运行上述代码前,需要先修改PyPDF2库pdf.py的源码,将
def encrypt(self, user_pwd, owner_pwd = None, use_128bit = True):
……
P = -1
改成
def encrypt(self, user_pwd, owner_pwd = None, use_128bit = True, permitval = -1):
……
P = permitval
permitval的值不同,呈现的权限控制不同,比如-1表示全部允许,-3904表示全部不允许,-44表示不允许编辑内容和添加注释,其它权限允许,更多权限值详见参考资料1。

【参考资料】