如何修复“意外的字节范围值,该值定义了签名数据的范围。详细信息:使用PDFBOX(2.0.12)在多个页面中添加外部签名时,签名字节范围无效”
以下代码适用于单页签名,而多页签名不起作用。
PDDocument pddoc = PDDocument.load(file);
PDSignature pds = new PDSignature();
SignatureOptions signatureOptions;
PDRectangle rect;//coordinates to visible signature
File imgFile;//background image in visible signature
String signDisplayInfo;//data to be displayed in visible signature
createVisualSignatureTemplate // generates the visible signature
for(int i=0;i<pageCount;i++) {
signatureOptions.setVisualSignature(AddVisibleSignature.createVisualSignatureTemplate(pddoc, i, rect, imgFile,signDisplayInfo));
signatureOptions.setPage(i);
pddoc.addSignature(pds, signatureOptions);
}
externalSigning = pddoc.saveIncrementalForExternalSigning(fos);
InputStream dataToSign = externalSigning.getContent();
hash = DigestUtils.sha256Hex(dataToSign);
在准备好哈希之后,被发送到另一台服务器以获取签名。得到响应后,将签名添加到pdf中。
String pkcs7Response = responseSignature;
byte[] sigbytes = java.util.Base64.getDecoder().decode(pkcs7Response);
externalSigning.setSignature(sigbytes);
pddoc.save(fos);
pddoc.close();
签名验证期间出错。
意外的字节范围值定义了签名数据的范围。
详细信息:签名字节范围无效