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

使用iText7的PdfCanvas添加PDF签名边框导致首个签名失效问题

问题:多签名场景下添加PdfCanvas边框导致首个签名失效

我尝试为PDF中的数字签名添加边框,但当多人签名时,第一个签名会失效,第二个签名则有效。推测问题出在使用PdfCanvas上,目前尚未找到其他实现方式。

签名核心代码

PdfSigner signer = new PdfSigner(pdfReader, byteNewPdf_2, new StampingProperties().useAppendMode());
PdfSignatureAppearance appearance = createAppearance(signer, reasonCert, reasonPDF, location,
                signBoxData, originalHashPdf, certData, metadata, pdfImage, idProcess, nameSigner,  signerNumber, signatureDate,  isDomain); 
Rectangle rect = signatureApp.appearanceRectangleSign(possitionResponse, metadata, signBoxData, signerNumber);
appearance.setPageRect(rect).setPageNumber(possitionResponse.getPageNumber());

IExternalDigest digest = new BouncyCastleDigest();
IExternalSignature signature = new PrivateKeySignature(pk, digestAlgorithm, provider);
signer.signDetached(digest, signature, chain, null, null,  null, 0 , subfilter);

边框创建代码调用

PdfCanvas canvas = signatureApp.borderSignPdf(signer, idProcess, signBoxData, possitionResponse,
               metadata, signerNumber);

画布创建实现代码

return new PdfCanvas(signer.getDocument(), possitionResponse.getPageNumber())
    .rectangle(possitionResponse.getX(), possitionResponse.getY(),  signBoxData.getSignatureBoxWidth(), signBoxData.getSignatureBoxHeight())
    .setLineWidth(!view_BorderSign ? 0 : 1)
    .stroke();

补充说明:不使用PdfCanvas时,文档可完成多次签名且无失效问题;但添加该画布后,首个签名就会失效,推测问题出在签名创建方式上。

签名初始化代码

PdfSigner signer = new PdfSigner(pdfReader, byteNewPdf_2, new StampingProperties().useAppendMode());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:55:14