我需要知道我将PDF文档上的签名放置在软件生成的文档上,并且该文档尚未被操纵。
我试图使用PDFBox从PDF中获取原始文档,所以我明白了这一点:
public static List<PDFSignatureInfo> getPDFSignatureInfo(byte[] byteArray ) throws IOException, CertificateException,
NoSuchAlgorithmException, InvalidKeyException,
NoSuchProviderException, SignatureException, InvalidNameException, TSPException {
List<PDFSignatureInfo> lpsi = new ArrayList<PDFSignatureInfo>();
// Try to open the input file as PDF
try (PDDocument document = PDDocument.load(new ByteArrayInputStream(byteArray))) {
// Get Signature dictionaries of PDF
for (PDSignature sig : document.getSignatureDictionaries()) {
PDFSignatureInfo psi = new PDFSignatureInfo();
lpsi.add(psi);
COSDictionary sigDict = sig.getCOSObject();
COSString contents = (COSString) sigDict.getDictionaryObject(COSName.CONTENTS);
Set<Map.Entry<COSName, COSBase>> entries = sigDict.entrySet();
for(Map.Entry<COSName, COSBase> entry: entries) {
// Don't return contents
if(!entry.getKey().equals(COSName.CONTENTS)) {
psi.entries.put(entry.getKey().getName(), entry.getValue().toString());
}
}
psi.reason = sig.getReason();
psi.name = sig.getName();
psi.signDate = sig.getSignDate().getTime();
psi.subFilter= sig.getSubFilter();
psi.contactInfo = sig.getContactInfo();
psi.filter = sig.getFilter();
psi.location = sig.getLocation();
psi.signedContent = sig.getSignedContent(byteArray);
我正在创建PDFSignatureInfo对象的列表,该对象是我想使用的模型。现在,我想我在上面写的最后一行中得到的是包含原始文档的byte[]
。但是,与原始文档相比,它是不一样的(可能有明显的原因对我而言并不明显。)
有帮助吗?