You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用iText创建支持双密码、多权限的加密PDF?

解决iText设置PDF多权限加密的问题

嘿,你遇到的问题很典型——两次调用setEncryption()会直接覆盖之前的配置,所以最后只有第二次的屏幕阅读器权限生效了。要同时设置打印和屏幕阅读器权限,你需要把这两个权限常量按位合并,只调用一次setEncryption()就好。

修正后的代码

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfWriter writer = PdfWriter.getInstance(document, byteArrayOutputStream);
writer.setPdfVersion(PdfWriter.VERSION_1_7);

// 用按位或运算符(|)合并多个权限
int combinedPermissions = PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_SCREENREADERS;
writer.setEncryption(firstPass, secondPass, combinedPermissions, PdfWriter.ENCRYPTION_AES_256);

关键说明

  • iText中的权限常量是二进制位标识,每个权限对应一个独立的位。用|运算符可以把多个权限的位同时置为1,这样就能同时开启多个权限了。
  • 这里的firstPass是用户密码(用于打开PDF),secondPass是所有者密码(拥有修改权限、移除加密等更高权限),别搞混两者的顺序哦。
  • 你选择的ENCRYPTION_AES_256加密方式需要PDF版本1.7及以上,所以setPdfVersion(PdfWriter.VERSION_1_7)的设置是正确的,能保证兼容性。

这样修改后,生成的PDF就会同时支持打印和屏幕阅读器权限,并且可以用两个不同的密码打开啦。

内容的提问来源于stack exchange,提问作者Liz Lamperouge

火山引擎 最新活动