【问题描述】用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。
【参考资料】