思路是给PdfWriter设置个不可修改的属性
WriterProperties wp = new WriterProperties(); // 我这里是只允许打印 wp.setStandardEncryption(null, "123456".getBytes(), EncryptionConstants.ALLOW_PRINTING, EncryptionConstants.DO_NOT_ENCRYPT_METADATA); // 我这里是HttpServletResponse直接返回文件 PdfWriter writer = new PdfWriter(response.getOutputStream(), wp);
setStandardEncryption的参数为访问者密码(打开文件就要输入密码),拥有者密码(关键操作要输入密码),访问者权限,加密方式。
权限 | 说明 |
ALLOW_PRINTING | 文档允许打印 |
ALLOW_DEGRADED_PRINTING | 允许用户打印文档,但不提供allow_printing质量(128位加密) |
ALLOW_MODIFY_CONTENTS | 允许用户修改内容,例如 更改页面内容,或插入或删除页 |
ALLOW_ASSEMBLY | 允许用户插入、删除和旋转页面和添加书签。页面的内容不能更改,除非也授予allow_modify_contents权限,(128位加密) |
ALLOW_COPY | 允许用户复制或以其他方式从文档中提取文本和图形,包括使用辅助技术。例如屏幕阅读器或其他可访问设备 |
ALLOW_SCREENREADERS | 允许用户提取文本和图形以供易访问性设备使用,(128位加密) |
ALLOW_MODIFY_ANNOTATIONS | 允许用户添加或修改文本注释和交互式表单字段 |
ALLOW_FILL_IN | 允许用户填写表单字段,(128位加密) |
请注意:访问者权限,只能选其中之一