我有一份pdf表格。如果在添加签名后更改了pdf表单,如何检查PDFBox v2.x.x?我认为itext 4.2.1中的等价物是signaturecoverswholedocument方法。我唯一能找到的是如何检查签名本身:
if (signerInformation.verify(new JcaSimpleSignerInfoVerifierBuilder().build(certificateHolder))) {
答案 0 :(得分:2)
没有完美的答案,但是做出决定的策略:
try (PDDocument document = PDDocument.load(new File(infile), password))
{
for (PDSignature sig : document.getSignatureDictionaries())
{
int[] byteRange = sig.getByteRange();
System.out.println("byteRange: " + Arrays.toString(byteRange));
System.out.println("Range max: " + (byteRange[byteRange.length-2] + byteRange[byteRange.length-1]));
// multiply content length with 2 (because it is in hex in the PDF) and add 2 for < and >
System.out.println("Content len: " + (sig.getCOSObject().getString(COSName.CONTENTS).length() * 2 + 2));
System.out.println("File len: " + new File(infile).length());
(...)
现在使用this file对此进行测试。你会得到这个输出:
byteRange: [0, 192, 10094, 162062]
Range max: 172156
Content len: 9902
File len: 172156
签名的数据从0开始,len 192,然后是签名,然后是10094的其余数据,使用len 162062.你会注意到10094 + 162062 == 172156,192 + 9902 == 10094
当然,如果有几个签名,那就不会那么完美了。