使用iText签名PDF后如何锁定文档禁改及禁止新增签名
问题原因
你当前使用的setCertificationLevel(PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED)是文档认证签名的配置,这类签名属于文档作者初始认证标记,阅读器对应的提示就是“no changes allowed(不允许更改)”,和你期望的“locked by signature(已通过签名锁定)”是两套完全独立的PDF签名机制:
- 认证签名:一个PDF仅能存在一个,用于标记文档发布者身份,权限控制是文档级配置
- 签名锁定:属于普通批准签名的扩展规则,签名生效后通过签名携带的锁字典限制文档操作,阅读器识别到该配置时就会提示“已通过签名锁定”
实现方案
去掉原有设置认证级别的代码,改为给签名添加全文档范围的签名锁配置,参考代码如下:
PdfSignatureAppearance pdfAppearance = stamper.getSignatureAppearance(); // 初始化签名锁对象 PdfSignatureLock signatureLock = new PdfSignatureLock(); // 配置锁定范围:全文档锁定,禁止内容修改、禁止新增任何签名/表单字段 signatureLock.lockAll(); // 将锁配置绑定到当前签名 pdfAppearance.setSignatureLock(signatureLock); // 后续按原有签名流程执行签名、关闭stamper即可
注意事项
- 不要同时配置认证级别和签名锁,两者逻辑互斥,同时配置时会优先走认证签名逻辑,无法触发“已通过签名锁定”的提示
- 该配置要求iText版本为5.5.0及以上、iText 7全版本支持,低版本无
PdfSignatureLock类无法实现该效果 - 配置完成后生成的签名文档,会同时禁止内容修改、禁止追加新签名,和期望效果完全一致
内容的提问来源于stack exchange,提问作者Alfredo Morales
相关产品推荐
相关产品推荐

