如何正确配置jsPDF的encryption属性实现PDF加密
jsPDF加密配置不生效的核心原因
jsPDF 核心构建包默认不包含加密、权限控制相关逻辑,直接在初始化参数中传入encryption配置不会被核心代码识别,自然不会生效。除此之外,示例代码中的权限参数写法不符合插件要求,使用了自定义字符串而非插件内置的权限常量,也会导致权限配置失效。
正确实现步骤
- 首先单独引入加密插件
加密能力是jsPDF的可选插件,不会随核心包默认加载,需要手动引入:
如果是npm工程化引入:
如果是CDN script标签引入,需要在加载jsPDF核心文件之后,额外加一行引入加密插件的脚本,注意插件版本必须和核心版本完全一致,避免兼容问题。import { jsPDF } from "jspdf"; // 引入和当前jsPDF版本匹配的加密插件 import "jspdf/dist/plugins/encrypt.min.js"; - 修正初始化配置,使用正确的权限参数
不要使用"print"/"copy"这类自定义字符串作为权限值,要调用插件暴露的内置权限常量,修正后的初始化代码如下:const doc = new jsPDF({ unit: 'pt', format: 'a1', userUnit: 72, encryption: { userPassword: "1234sds@esdsdsds#22s5", ownerPassword: "797233232#2ewwe24", userPermissions: [ jsPDF.API.permissions.PRINT, jsPDF.API.permissions.COPY ] } }); // 后续按原有逻辑添加PDF内容、导出即可 doc.text("测试加密PDF", 100, 100); doc.save("加密文件.pdf"); - 效果验证
导出的PDF打开时会要求输入用户密码,输入密码后仅能执行配置允许的打印、复制操作,未开放的修改、批注等操作会被阅读器拦截。
可选权限常量说明
常用的权限配置值如下,按需组合传入userPermissions数组即可:
jsPDF.API.permissions.PRINT:允许打印文档jsPDF.API.permissions.COPY:允许复制文档内容jsPDF.API.permissions.MODIFY:允许修改文档内容jsPDF.API.permissions.ANNOTATE:允许添加批注jsPDF.API.permissions.FILL_FORMS:允许填写表单字段
注意:如果引入插件后加密仍不生效,先检查jsPDF版本,2.0以上版本才支持当前的encryption配置写法,1.x版本的加密插件调用方式存在差异,建议升级到最新稳定版使用。
内容的提问来源于stack exchange,提问作者Tejas Chauhan
相关产品推荐
相关产品推荐

