pdfbox-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sheila M. Morrissey" <Sheila.Morris...@ithaka.org>
Subject RE: Duplicating an existing link annotation
Date Thu, 15 Mar 2012 15:16:36 GMT
Reply at haste, repent at leisure-should look more like this:


PDAnnotationLink newLink = new PDAnnotationLink();
            PDBorderStyleDictionary bsd = null;
            Object cob = newLink.getBorderStyle();
            if (cob instanceof COSObject){
                   COSObject cos = (COSObject)cob;
                   COSBase base = cos.getObject();
                   if (base instanceof COSDictionary){
                     COSDictionary dic = (COSDictionary)base;
                     Set<COSName> keys = dic.keySet();
                     bsd = new PDBorderStyleDictionary(dic);

                     // or bsd = (PDBorderStyleDictionary) cob;
                   }
            }
            else if (cob instanceof PDBorderStyleDictionary){
                   bsd = (PDBorderStyleDictionary)cob;
            }
            if (bsd != null){
            // off you go
            }
            else {
            // hmmm.. what happened to my dictionary?
            }
I do think it might be a good idea to refactor the PDAnnotationLink.getBorderStyle() method
so that when it retrieves the dictionary object for border style, it not assume it gets a
direct object back - then, when we use the PDModel code, we'd know the lower level stuff has
been handled -

smm

From: Gilad Denneboom [mailto:gilad.denneboom@gmail.com]
Sent: Thursday, March 15, 2012 5:12 AM
To: Sheila M. Morrissey
Cc: users@pdfbox.apache.org
Subject: Re: Duplicating an existing link annotation

Hi Sheila,

Thanks for the input... However, this code doesn't compile.
This line:
if (base instanceof PDBorderStyleDictionary){
Produces the following compilation error:
Incompatible conditional operand types COSBase and PDBorderStyleDictionary

Any ideas on how this can be solved?

Thanks again, Gilad.
On Wed, Mar 14, 2012 at 10:55 PM, Sheila M. Morrissey <Sheila.Morrissey@ithaka.org<mailto:Sheila.Morrissey@ithaka.org>>
wrote:
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:gilad.denneboom@gmail.com<mailto:gilad.denneboom@gmail.com>]
Sent: Sunday, March 11, 2012 5:32 PM
To: users@pdfbox.apache.org<mailto:users@pdfbox.apache.org>
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.


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message