You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于现有PDF初始化iText.Signatures.SignerProperties并获取认证级别?

解决iText9中读取PDF签名认证级别(CertificationLevel)的问题

在iText9中,若要读取现有PDF文档中签名的CertificationLevel,你可以通过签名字典初始化SignerProperties实例,具体实现步骤如下:

  1. 借助SignatureUtil获取PDF中的签名字典;
  2. 将签名字典关联到SignerProperties实例;
  3. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:12:38