在服务器中,该 pdf 带有时间戳。我想知道最后一次检查的时间。这是文档时间戳。我的代码适用于普通签名,但不适用于文档时间戳。
这是我获得正常签名的代码:
let { PDFDocument, rgb, PDFDict, PDFName, PDFHexString, PDFString } = require('pdf-lib');
const extractSignatureInfo = async (pdfBuf) => {
console.log('extractSignatureInfo');
// Load the signed PDF document
const pdfDoc = await PDFDocument.load(pdfBuf);
const signatureInfoList = [];
// Iterate through all fields in the document
const acroFormDict = pdfDoc.context.lookup(pdfDoc.catalog.get(PDFName.of('AcroForm')));
if (acroFormDict){
const fieldsArray = acroFormDict.get(PDFName.of('Fields')).asArray();
for (const fieldRef of fieldsArray) {
const field = pdfDoc.context.lookup(fieldRef); // Use lookup to get the actual PDFRef
const fieldType = field.get(PDFName.of('FT'))?.asString();
if (fieldType === '/Sig') {
const signatureDictRef = field.get(PDFName.of('V'));
const signatureDict = pdfDoc.context.lookup(signatureDictRef); // Use lookup for the signatureDict
if (signatureDict instanceof PDFDict) {
const signatureInfo = {
fieldName: field.get(PDFName.of('T'))?.asString(),
certificateName: signatureDict.get(PDFName.of('Name'))?.toString(),
signingTime: signatureDict.get(PDFName.of('M'))?.toString(),
};
let reason = signatureDict.get(PDFName.of('Reason'))
if (reason instanceof PDFString) {
reason = decodeUTF16BE(reason) || reason.asString('utf-8');
}
signatureInfo.reason = reason;
signatureInfoList.push(signatureInfo);
}
}
}
}
return signatureInfoList;
}