I wonder if the PDBorderStyleDictionary didn't end up serialized as an indirect
object --
Maybe something like the following would work:
PDBorderStyleDictionary bsd = null;
COSObjectable cob = newLink.getBorderStyle();
if (cob instanceof COSObject){
COSObject cos = (COSObject)cob;
COSBase base = cos.getObject();
if (base instanceof PDBorderStyleDictionary){
bsd = (PDBorderStyleDictionary) base;
}
}
else if (cob instanceof PDBorderStyleDictionary){
bsd = PDBorderStyleDictionary cob;
}
If (bsd != null){
// off you go
}
else {
// hmmm.. what happened to my dictionary?
}
Sheila
-----Original Message-----
From: Gilad Denneboom [mailto:[email protected]]
Sent: Sunday, March 11, 2012 5:32 PM
To: [email protected]
Subject: Duplicating an existing link annotation
Hi all,
I'm trying to duplicate an existing link annotation (PDAnnotationLink) from
one page to others. I'm using this code:
private static PDAnnotationLink duplicateLink(PDAnnotationLink link,
PDPage page) {
PDAnnotationLink newLink = new PDAnnotationLink();
newLink.setAction(link.getAction());
newLink.setColour(link.getColour());
newLink.setRectangle(link.getRectangle());
newLink.setAppearance(link.getAppearance());
newLink.setAppearanceStream(link.getAppearanceStream());
newLink.setHighlightMode(link.getHighlightMode());
newLink.setAnnotationFlags(link.getAnnotationFlags());
newLink.setBorderStyle(link.getBorderStyle());
newLink.setPage(page);
return newLink;
}
This works when I run the tool on a file I've created and added some links
to. HOWEVER, if I then run the result file through the same code, the
following Exception is thrown:
Exception in thread "main" java.lang.ClassCastException:
org.apache.pdfbox.cos.COSObject cannot be cast to
org.apache.pdfbox.cos.COSDictionary
at
org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink.getBorderStyle(PDAnnotationLink.java:131)
Since this is a RunTimeException I can't even catch it and my application
fails... Any help with this will be appreciated.
Am I creating the new link in an incorrect way?
Thanks in advance, Gilad.