Java iText PdfStamper增加已签名pdf的大小

Java iText PdfStamper增加已签名pdf的大小,java,pdf,itext,Java,Pdf,Itext,为什么每次我使用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

为什么每次我使用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();
    }
}
如果调用test,则生成的pdf会根据签名信息增加大小:

  • 我的初始pdf有一个LTV符号,但我需要添加一个时间戳。我需要添加LTV()一些PDF,然后添加LTVNOTS(),因为这是一个不同的TSA。这使得在模式append中调用两次PdfReader,每次我这样做都会增加大约190kb的pdf。这意味着增加380kb。

  • 我已经用一个简单的sing调用了上面的测试方法,每次我对生成的pdf调用test(),每次都会增加3,5kb(我想是因为小符号信息)

为什么pdfstamper在我没有添加任何更改的情况下也会增加我的pdf大小?我怎样才能避免呢?390kb这是一个问题,因为我需要放弃数千个PDF并存储它们

我正在使用itext 5.5.9


提前谢谢

这是一个奇怪的问题,因为它表明您不理解数字签名的概念。在签署PDF文件时,您希望确保一旦有人更改了单个字节,签名就会中断。每次对文档进行签名时,您都会通过添加签名字典来保护文档上一版本的字节,签名字典的内容至少包含要保护的字节的签名哈希

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

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

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

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


总文件大小将始终增加。

感谢您提供的信息,但我想知道,如果我只调用我的test()方法而不添加任何新符号或任何内容,为什么itext会添加190kb,只需新建PDFStamper()并关闭它。190kb对于添加“nothing”来说太多了。如果我添加一个新符号,它会由于新符号而增加190kb+5kb-10kb。我了解新的5-10kb标志增加,但不是190。。。您能解释一下原因吗?您正在附加模式下使用
PdfStamper
新的PdfStamper(r,fos,'\0',true)
如果在附加模式下不使用
PdfStamper
new PdfStamper(r,fos,“\0',false);
),则不会扩展现有文件,但会破坏签名。我知道,但为什么附加模式会将pdf大小增加到190kb,即使没有添加任何内容或符号来开始扩展文件?当然是因为它有签名,但我不明白。我认为append只会从添加的X个新字节中添加X个字节,而不是base+X字节。因为您正在进行新修订,并且每次新修订都会创建一个新的外部参照表以及一个新的目录和信息字典(包含修改日期)。你为什么质疑PDF参考文件?你在骗我吗?我不是在骗你,放松点。。。我只是想了解,如果我不添加新内容,为什么会有这么大的增长。我的问题是,即使没有添加任何内容,我也不知道创建新的附加pdfstamper意味着什么。我必须添加LTV,这会大大增加我的pdf大小。我想知道为什么如果添加ocrl,crls。。。大小是一个小字节(10KB),但我的pdf文件kb增加了很多(+200kb)。谢谢布鲁诺!