【问题标题】:iText PdfStamper increase size of a signed pdfiText PdfStamper 增加签名 pdf 的大小
【发布时间】:2016-09-26 12:31:22
【问题描述】:

为什么每次我使用 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, '\0', true);
    } finally {
        stp.close();
        fos.close();
        r.close();
    }
}

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

  • 我的初始 pdf 有 LTV 标志,但我需要添加时间戳。我需要 addLtv() 一些 pdf,然后是 addLtvNoTs() 因为它是不同的 TSA。这使得在追加模式下调用两次 PdfReader 并且每次我这样做都会增加我的 pdf 大约 190kb。这意味着将其增加 380kb。 http://developers.itextpdf.com/question/how-enable-ltv-timestamp-signature

  • 我已经测试了使用带有简单 sing 的 pdf 调用上述测试方法,每次我在生成的 pdf 上调用 test() 时,它每次都会增加 3.5kb(我认为是由于符号信息小)。

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

我使用的是 itext 5.5.9

提前致谢!

【问题讨论】:

    标签: java pdf itext


    【解决方案1】:

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

    请参见下图,该图显示了经过三次签名的 PDF 架构:

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

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

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

    总文件大小会一直增加。

    【讨论】:

    • 感谢您的信息,但我想知道为什么 itext 会增加 190kb,如果我只是调用我的 test() 方法而不添加任何新符号或任何内容,只需 new PDFStamper() 并关闭它。 190kb 对于添加“无”来说太多了。如果我添加一个新标志,它会由于新标志而增加 190kb + 5kb-10kb。我知道新的 5-10kb 符号增加但不是 190...你能解释一下为什么吗?
    • 您在追加模式下使用PdfStamper:new PdfStamper(r, fos, '\0', true); 如果您在追加模式下不使用PdfStamper (new PdfStamper(r, fos, '\0', false);),则不会扩展现有文件,但您破坏签名。
    • 我知道,但是为什么追加模式会增加 190kb 的 pdf 大小,即使没有添加任何内容或符号来开始扩展文件?当然是因为它是签名的,但我不明白。我认为 append 仅从添加的 X 个新字节中添加 X 个字节,而不是基本 + X 个字节。
    • 因为您正在制作一个新修订版,并且每个新修订版都会创建一个新的外部参照表以及一个新的目录和信息字典(包含修改日期)。你为什么质疑 PDF 参考?你在骗我吗?
    • 我不是在骗你,放松...我只是想了解如果我不添加新内容,为什么会出现如此大的增长。我的问题是,即使没有添加任何内容,我也不知道创建一个新的附加 pdfstamper 意味着什么。我必须添加 Ltv,这会大大增加我的 pdf 大小。我想知道为什么如果添加 ocrl、crls... size 是一个小字节量(10 kb),但我的 pdf 文件 kb 增加了很多(+200kb)。谢谢布鲁诺!
    猜你喜欢
    • 2012-07-31
    • 2016-08-04
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2011-12-31
    • 1970-01-01
    • 2018-04-08
    相关资源
    最近更新 更多