Я получаю это исключение, когда даю полностью определенные имена в виде некоторых случайных имен, таких как " 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.