В org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureOptions
есть setVisualSignature
метод. Я могу создать визуальную подпись из другого потока PDF, который имеет внешний вид визуальной подписи (чтобы скопировать внешний вид).
1) Я создал PDF-файл внешнего вида подписи и с помощью метода setVisualSignature()
мне удалось скопировать визуальную подпись. Все работает;
2) Меняю визуальную подпись (меняю изображение) из PDFBox. Чтобы получить COSObject:
Iterator<Entry<COSObjectKey, Long>> xrefEntriesIt = doc.getDocument()
.getXrefTable().entrySet().iterator();
while (xrefEntriesIt.hasNext()) {
COSObject object = doc.getDocument().getObjectFromPool(
xrefEntriesIt.next().getKey());
if (object.getDictionaryObject(COSName.SUBTYPE) == COSName.IMAGE) {
changeImage(object, doc);
}
}
и изменить изображение:
private static void changeImage(COSObject obj, PDDocument doc) {
PDXObjectImage imageInPdf =
(PDXObjectImage) PDXObject.createXObject((COSStream) obj.getObject());
File inputFile = new File("/new_SIGNATURE_IMG.jpg");
PDXObjectImage newImage = new PDJpeg(doc, new FileInputStream(inputFile));
imageInPdf.getCOSStream().replaceWithStream(newImage.getCOSStream());
doc.save("/new.pdf");
}
Все работает.
3) Когда я вызываю метод setVisualSignature()
с новым PDF-файлом и новым изображением внешнего вида (которое я изменяю с помощью своего кода), у меня возникает эта ошибка:
Исключение в потоке "main" java.lang.ClassCastException: org.apache.pdfbox.cos.COSObject нельзя преобразовать в org.apache.pdfbox.cos.COSDictionary в org.apache.pdfbox.pdmodel.PDDocument.addSignature (PDDocument.java : 474)
Это образцы.
Что происходит? Я неправильно меняю изображения?