在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和新的外观图像(我用我的代码改变)调用方法时,我有这个错误:
线程“主”java.lang.ClassCastException 中的异常:org.apache.pdfbox.cos.COSObject 无法在 org.apache.pdfbox.pdmodel.PDDocument.addSignature(PDDocument.java 中转换为 org.apache.pdfbox.cos.COSDictionary :474)
那是样品
怎么了?我是否错误地更改了图像?