使用PDFBox从签名的PDF中读取原始文档

时间:2018-10-22 22:25:02

标签: java pdf certificate digital-signature pdfbox

我需要知道我将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[]。但是,与原始文档相比,它是不一样的(可能有明显的原因对我而言并不明显。)

有帮助吗?

0 个答案:

没有答案