获取签名规则、签名时间、签名者、签名结果、证书、证书引证、签名算法标识
引入com.itextpdf
private static void pdfVerifyForXndx(FileAttribute fileAttribute) throws Exception {
PdfReader pdfReader = new PdfReader(fileAttribute.getPath());
AcroFields acroFields = pdfReader.getAcroFields();
List<String> signatureNames = acroFields.getSignatureNames();
if(org.apache.commons.collections.CollectionUtils.isNotEmpty(signatureNames)){
String names = String.join(",", signatureNames);
String signatureName = signatureNames.get(0);
PdfDictionary signatureDictionary = acroFields.getSignatureDictionary(signatureName);
//签名者姓名
PdfString name = signatureDictionary.getAsString(PdfName.NAME);
String nameStr = name != null ? name.toString() : null;
fileAttribute.setSigner(nameStr);
//签名日期
PdfString asName = signatureDictionary.getAsString(PdfName.M);
String MStr = asName != null ? asName.toString() : null;
fileAttribute.setSignatureTime(MStr);
//签名证书 -指定用于签署文档的证书。它包含证书序列号、有效期和颁发机构等信息。
PdfString cert = signatureDictionary.getAsString(PdfName.CERT);
String certStr = cert != null ? cert.toUnicodeString(): null ;
fileAttribute.setCertificate(certStr);
//签名规则
PdfName filter = signatureDictionary.getAsName(PdfName.FILTER);
//签名算法标识 SubFilter --指定用于解密签名数据的解密算法名称
PdfName subFilter = signatureDictionary.getAsName(PdfName.SUBFILTER);
String signatureRule ="";
if (PdfName.ADOBE_PPKLITE.equals(filter) && PdfName.ADBE_PKCS7_DETACHED.equals(subFilter)) {
signatureRule ="Detached signature with PKCS#7 format.";
} else if (PdfName.ADOBE_PPKMS.equals(filter) && PdfName.ADBE_PKCS7_SHA1.equals(subFilter)) {
signatureRule ="PKCS#7 signature with SHA-1 digest.";
}else if(PdfName.XML.equals(filter) && PdfName.ADBE_X509_RSA_SHA1.equals(subFilter)){
signatureRule ="XML Digital signature with adbe.x509.rsa_sha1.";
} else {
signatureRule =filter +" "+subFilter;
}
fileAttribute.setSignatureRule(signatureRule);
//签名结果 BYTERANGE -通常用于验证签名的完整性
String byterangeStr ="";
PdfArray byterange = signatureDictionary.getAsArray(PdfName.BYTERANGE);
if(byterange != null && byterange.size() > 0){
for (int i = 0; i < byterange.size(); i++) {
PdfObject obj = byterange.getPdfObject(i); // 获取数组中的元素
byterangeStr += String.valueOf(obj) +" ";
}
}
fileAttribute.setSignatureResult(byterangeStr);
//证书引证
PdfString asName1 = signatureDictionary.getAsString(PdfName.CONTACTINFO);
PdfName asName2 = signatureDictionary.getAsName(PdfName.CRL);
PdfName asName3 = signatureDictionary.getAsName(PdfName.OCSP);
String asName1Str = asName1 != null ? asName1.toUnicodeString(): null ;
String asName2Str = asName2 != null ? asName2.toString(): null ;
String asName3Str = asName3 != null ? asName3.toString(): null ;
fileAttribute.setCertificateRuote(asName1Str + " " +asName2Str+" "+asName3Str);
}
}