当前位置: 首页 > 知识库问答 >
问题:

iText PdfStamper增加已签名pdf的大小

元鸿波
2023-03-14

为什么每次我使用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它每次增加3,5kb(我认为由于小标志信息)。

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

我用的是iText5.5。9

提前谢谢!

共有1个答案

史阳晖
2023-03-14

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

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

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

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

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

总文件大小将始终增加。

 类似资料:
  • 是否可以在签名的PDF中添加附加页面并在不破坏第一个签名的情况下再次签名。 我在adobe留档中读到增量更新,这可能是可能的。 然而,我不确定这是否适用于所有内容,还是仅适用于注释(注释)、表单填写和数字签名。 我试图通过在Java中使用Apache PDFBox来做到这一点,对文档进行签名,然后加载文档,将页面附加到文档中,使用saveIncremental()保存文档,然后再次签名。 但是,第

  • 我正试图用BouncyCastle CMS签署一份PDF文件。签名有效,但Adobe Reader告诉我它还没有准备好LTV。 据我所知,CRL嵌入在CMS SignedData中。证书也被嵌入其中。还嵌入了时间戳。 签名是一个分离的签名,放在“预留空间”。 为什么签名还没有准备好?我是不是做错了什么? 签名测试-PDF:http://www.filedropper.com/outputx 代码:

  • 我使用PdfWriter setEncryption对PDF文档进行了加密/解密。一切正常,解密也正常。 当我为数字签名的PDF文档做同样的事情时,我的数字信息与消息一起损坏(SigDict/Contents非法数据) 是否可以在不影响数字签名信息的情况下加密PDF?

  • 我正在尝试通过签名服务签署一个pdf文件。这个服务需要发送一个十六进制编码的SHA256摘要,作为回报,我会收到一个十六进制编码的SignatureValue。此外,我还收到了签名证书、中间证书、OCSP响应和TimeStampToken。但是,我在尝试使用SignatureValue对pdf进行签名时已经陷入了困境。 我读过布鲁诺的白皮书,过度浏览互联网,尝试了很多不同的方式,但签名不断出现无效

  • 我在UICollectionViewCell上有一个UILabel。在UILabel上,我附加了一个UITapGestureRecognizer。我试图在UILabel的宽度增加时,增加UILabel上UITapGestureRecognizer的抽头面积。 下面是代码示例: 我该怎么做呢?

  • 然后我用adobe签名并通过以下方式传递: 我真的不明白为什么这不起作用。任何帮助都会很好! 编辑: 按照建议,我已经将添加的注释、页面和注释列表的NeedToBeUpdated标志设置为true(希望最后一个操作正确): 注释仍然没有保存,所以我显然遗漏了一些东西。 编辑3: 但是,当我在adobe Reader中打开文档时,它不会出现。也许这与外观流的关系更大,而不是注释本身?