iText PdfStamper 增加签名 pdf 的大小

iText PdfStamper increase size of a signed pdf

为什么每次使用 PdfStamper 都会增加我签名的 pdf 的大小?

这是我的代码:

private static void test(String src, String pwd, String dest) throws Exception {
    byte[] pwdByte = pwd != null ? pwd.getBytes() : null;
    PdfReader r = null;
    PdfStamper stp = null;
    FileOutputStream fos = null;
    try {
        r = new PdfReader(src, pwdByte);
        fos = new FileOutputStream(dest);
        stp = new PdfStamper(r, fos, '[=10=]', true);
    } finally {
        stp.close();
        fos.close();
        r.close();
    }
}

如果我调用测试,生成的 pdf 会根据签名信息增加大小:

即使我没有添加任何更改,为什么 pdfstamper 会增加我已签名的 pdf 大小?我怎样才能避免它? 390kb 这是个问题,因为我需要放弃数千个 pdf 并存储它们。

我正在使用 itext 5.5.9

提前致谢!

这是一个奇怪的问题,因为它表明您不了解数字签名的概念。当您签署 PDF 时,您希望确保签名在有人更改单个字节时立即中断。每次签署文档时,您 保护 文档先前修订的字节,方法是添加一个签名字典,其内容至少包含您要保护的字节的签名哈希.

请参见下图,其中显示了 PDF 签名三次的架构:

假设您想要添加第四个签名,并且您希望生成的文件具有与以前相同的大小,您将不得不更改现有文档中的一些字节。这至少会破坏现有签名之一。

你提到 LTV。 LTV 意味着添加文档安全存储 (DSS) 和时间戳签名。同样的规则适用:你必须添加额外的字节,因为一旦你改变现有的字节,你就会破坏现有的签名:

每次最新时间戳签名的证书过期,都要重复同样的过程:

文件总大小会一直增加。