Django项目中使用Reportlab的pdfencrypt为PDF添加打开密码
解决方案
你只需要将加密实例作为encrypt参数传入doc.build()方法即可,具体修改如下:
- 首先确保导入对应的依赖:
from reportlab.lib import pdfencrypt
- 找到原代码中
doc.build(elements)这一行,替换为以下内容:
encrypt = pdfencrypt.StandardEncryption("password", canPrint=0) doc.build(elements, encrypt=encrypt)
修改后完整可运行代码
from reportlab.lib import pdfencrypt # 保留你原来的其他导入内容即可 def pdf_view(request): response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename="members.pdf"' elements = [] doc = SimpleDocTemplate(response, rightMargin=0.5 * cm, leftMargin=6.5 * cm, topMargin=0.3 * cm, bottomMargin=0) rows = [] users = User.objects.all() for user in users: rows.append(( user.username, user.email, user.first_name, user.last_name, formats.date_format(user.date_joined, "SHORT_DATETIME_FORMAT"), formats.date_format(user.subscriptions.current_period_end, "SHORT_DATETIME_FORMAT") )) table = Table(rows, colWidths=46 * mm, rowHeights=30, repeatRows=1) table.setStyle([ ('GRID', (0, 0), (-1, -1), 0.25, colors.black), ("ALIGN", (0, 0), (-1, -1), "LEFT"), ]) # 原代码此处重复创建了Table对象,会导致上方设置的样式失效,已删除重复代码 elements.append(table) # 新增加密逻辑 encrypt = pdfencrypt.StandardEncryption("password", canPrint=0) doc.build(elements, encrypt=encrypt) return response
补充说明
canPrint=0表示禁止用户打印该PDF文件,如需放开打印权限可修改为canPrint=1- 你可以将固定密码替换为动态生成的专属密码,实现不同用户生成的PDF密码不同
内容的提问来源于stack exchange,提问作者Biju
相关产品推荐
相关产品推荐

