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

iText7 SignatureValidator遇/JBIG2Decode过滤器报错,疑惑验签为何需解析该图片

PDF签名验证时遭遇JBIG2Decode过滤器不支持问题

我编写了一段用于验证PDF文档签名的简单代码:

var stream = new FileStream("signed_with_jbig2decode.pdf", FileMode.Open);

var ltvDocument = new PdfDocument(new PdfReader(stream));
var signatureUtil = new SignatureUtil(ltvDocument);


var validator = new ValidatorChainBuilder()
    //.WithTrustedCertificates(_rootCAs)
    .WithAdESReportAggregator(new DefaultAdESReportAggregator())
    .BuildSignatureValidator(ltvDocument);

var validationReport = validator.ValidateSignatures();

var failures = validationReport.GetFailures();

foreach (var f in failures)
{
    Console.WriteLine($"{f.GetMessage()} : {f.GetExceptionCause()?.Message}");
}

运行这段代码处理目标PDF时,得到如下错误输出:

IOException occurred during document revisions reading. : Filter /JBIG2Decode is not supported.
IOException occurred during document revisions reading. : Filter /JBIG2Decode is not supported.
...

(注:另有部分错误可通过取消注释.WithTrustedCertificates(...)行解决)

我了解iText7无法解析使用/JBIG2Decode过滤器的图片,但不明白为何PDF验签需要进行此操作?


PDF签名验证的核心是确认签名的完整性与真实性,这需要检查签名覆盖的文档内容是否被篡改。iText7在验证签名时,会尝试解析文档的各个修订版本——因为PDF签名通常以追加修订的形式添加到文档末尾,验证过程需要对比不同修订的内容差异,确认签名对应的修订未被篡改。

当文档中存在使用/JBIG2Decode过滤器的图片时,iText7在读取文档修订内容的过程中,会默认尝试解析这些图片流。虽然签名验证本身不需要解析图片内容,但iText7的底层文档读取逻辑会处理所有流对象的解码,以此确保能完整获取文档的原始字节信息,用于签名的哈希比对。如果遇到不支持的过滤器,就会抛出IO异常,中断修订读取流程。

简言之,这是iText7内部文档处理逻辑导致的:为了保证签名覆盖内容的完整性校验准确,它需要完整读取并解码文档中的所有流,哪怕这些流和签名逻辑没有直接关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:52:43