iTextSharp5 PDF密码保护失效:为何生成文件无需密码即可打开?
问题原因与修正方案
你的代码问题出在PdfEncryptor.Encrypt方法的参数顺序错误,导致加密逻辑不符合预期:
在iTextSharp 5的PdfEncryptor.Encrypt方法中,第四个参数是用户密码(打开文件时需要输入的密码),第五个参数是所有者密码(用于修改文件权限、密码的管理密码)。你当前把用户密码设为了null,所有者密码设为"password"——当用户密码为null时,任何人均可直接打开文件,仅受权限限制,这就是Adobe Acrobat无需密码就能打开的原因。
修正后的代码
将用户密码和所有者密码的位置调换,根据需求设置对应密码:
using (Stream input = new FileStream(@"Original.pdf", FileMode.Open, FileAccess.Read, FileShare.Read)) { using (Stream output = new FileStream(@"New.pdf", FileMode.Create, FileAccess.Write, FileShare.None)) { PdfReader PDFreader = new PdfReader(input); // 用户密码设为"password"(打开需输入),所有者密码可设为独立值或与用户密码一致 PdfEncryptor.Encrypt(PDFreader, output, true, "password", "ownerPass", PdfWriter.ALLOW_SCREENREADERS); } }
参数说明
true:启用128位高强度加密(兼容Acrobat 5及以上版本)- 第四个参数:用户密码,为空则无需密码即可打开文件
- 第五个参数:所有者密码,用于修改文件权限、重置密码等操作
PdfWriter.ALLOW_SCREENREADERS:设置文件权限,这里允许屏幕阅读器访问,可根据需求调整为其他权限(如禁止打印、修改等)
内容的提问来源于stack exchange,提问作者BenevolentDeity
相关产品推荐
相关产品推荐

