如何基于现有PDF初始化iText.Signatures.SignerProperties并获取认证级别?
解决iText9中读取PDF签名认证级别(CertificationLevel)的问题
在iText9中,若要读取现有PDF文档中签名的CertificationLevel,你可以通过签名字典初始化SignerProperties实例,具体实现步骤如下:
- 借助
SignatureUtil获取PDF中的签名字典; - 将签名字典关联到
SignerProperties实例; - 调用
GetCertificationLevel()方法获取认证级别数值。
修改后的完整代码
static void GetCertificationLevel(string SRC) { using PdfReader reader = new PdfReader(SRC); using PdfDocument doc = new PdfDocument(reader); SignatureUtil signUtil = new SignatureUtil(doc); if (signUtil.GetSignatureNames().Count == 0) { Console.WriteLine("此文档无签名。"); } else { foreach (var sigName in signUtil.GetSignatureNames()) { PdfSignature signature = signUtil.GetSignature(sigName); PdfDictionary dict = signUtil.GetSignatureDictionary(sigName); // 通过签名字典初始化SignerProperties并获取认证级别 SignerProperties signerProps = new SignerProperties().SetSignatureDictionary(dict); int certificationLevel = signerProps.GetCertificationLevel(); // 原有签名权限信息读取逻辑 SignaturePermissions perms = new SignaturePermissions(dict, null); Console.Write($" {sigName}\n" + $" {signature.GetDate()}\n" + $" 认证级别(CertificationLevel): {certificationLevel}\n" + $" 是否为认证签名: {perms.IsCertification()}\n" + $" 是否允许填写表单: {perms.IsFillInAllowed()}\n" + $" 是否允许添加注释: {perms.IsAnnotationsAllowed()}\n" + $" 字段锁定规则: "); if (perms.GetFieldLocks().Count != 0) foreach (SignaturePermissions.FieldLock @lock in perms.GetFieldLocks()) { Console.Write($"{@lock} "); } else Console.Write("-"); Console.WriteLine("\n"); } } }
关键说明
SignerProperties的SetSignatureDictionary()方法可将现有签名字典关联到实例,从而读取其中的认证级别配置;- 认证级别数值对应含义:
- 0:无认证(普通签名)
- 1:允许填写表单和添加注释
- 2:仅允许填写表单
- 3:不允许任何文档修改
内容的提问来源于stack exchange,提问作者kjt
相关产品推荐
相关产品推荐

