"fieldType": "Sig" с полностью определенным именем без префикса с "signature" создает исключение java.lang.ClassCastException - PullRequest
0 голосов
/ 21 февраля 2019

Я получаю это исключение, когда даю полностью определенные имена в виде некоторых случайных имен, таких как " test " для "fieldType": "Sig" с использованием Apache PDFBox с версией 2.0.13 как последняя версия, но когда я даю полное имя с префиксом " подпись ", все работает нормально .Пожалуйста, дайте мне знать, что может быть основной причиной этой проблемы.

org.apache.pdfbox.cos.COSString не может быть приведен к org.apache.pdfbox.cos.COSDictionary

Трассировка стека:

java.lang.ClassCastException: org.apache.pdfbox.cos.COSString cannot be cast to org.apache.pdfbox.cos.COSDictionary
    at org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField.getValue(PDSignatureField.java:170)
    at org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField.getSignature(PDSignatureField.java:116)
    at org.apache.pdfbox.pdmodel.PDDocument.findSignatureField(PDDocument.java:460)
    at org.apache.pdfbox.pdmodel.PDDocument.addSignature(PDDocument.java:365)

Код:

private PDSignature findExistingSignature(PDAcroForm pdAcroForm, String signatureFieldName) {
    PDSignature signature = null;
    if (pdAcroForm != null) {
        PDSignatureField signatureField = (PDSignatureField) pdAcroForm.getField(signatureFieldName);
        System.out.println("signatureField >>>>>>>>>>>>>>>>>>."+ signatureField);  // !!!!!!!!!
        if (null != signatureField) {
            signature = signatureField.getSignature();  // !!!!!!!!!
            if (signature == null) {
                signature = new PDSignature();
                signatureField.getCOSObject().setItem(COSName.V, signature);
            } else {
                throw new IllegalStateException("The signature field received ::" + signatureFieldName + " is already signed.");
            }
        }
    }
    return signature;
}

Вот что напечатано

signatureField >>>>>>>>>>>>>>>>>>. Vimal {type: PDSignatureField value: COSString {}}

Пожалуйста, используйте пустые поля подписи в любом файле PDF, чтобы поле подписи не имело подписисловарь в его / V элементе, но строка для тестирования, поскольку я не могу прикрепить образец PDF.

...