×

pdf 加密 权限 打印 复制

用Python为PDF文档加密并设置权限控制

鹭岛小千 鹭岛小千 发表于2021-08-18 21:47:43 浏览931 评论0

抢沙发发表评论

【问题描述】用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()

效果:

33-1.png注:reportlab.lib.pdfencrypt.StandardEncryption类提供的控制权限参数如下:

33-2.png



设置已有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)

效果:

33-3.png


注:运行上述代码前,需要先修改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。


打赏码.png


【参考资料】

  1. PDFReference16, Section 3.5, Page 99

  2. ReportLab open-source User Guide, Chapter 4, Page 59

  3. python 对PDF文件加密、设置只读、不可编辑pypdf2

  4. python: pdf - set password protected print, copy, paste options? 

  5. pdftk-pro-guidepdftk-pro-guide


群贤毕至

访客