package com.sun.pdfview.annotation; import java.io.IOException; import com.sun.pdfview.PDFDestination; import com.sun.pdfview.PDFObject; import com.sun.pdfview.PDFParseException; import com.sun.pdfview.action.GoToAction; import com.sun.pdfview.action.PDFAction; import com.sun.pdfview.annotation.PDFAnnotation.ANNOTATION_TYPE; /***************************************************************************** * PDF annotation describing a link to either a location within the current * document, a location in another PDF file, an application/file to be opened * or a web site. * In the PDF structure a link can be a destination ("DEST") or an action ("A"). * Both ways are handled as actions internally, i.e. for getting the links * destination, you should get the action from this annotation object. It can be * one of the following actions: * <li>GotoAction - for a file internal destination</li> * <li>GoToRAction - for a destination in a remote PDF file</li> * <li>GoToEAction - for a destination in an embedded PDF file</li> * <li>UriAction - for a web link</li> * <li>LaunchAction - for launching an application/opening a file</li> * * @author Katja Sondermann * @since 06.07.2009 ****************************************************************************/ public class LinkAnnotation extends PDFAnnotation { private PDFAction action = null; /************************************************************************* * Constructor * @param annotObject * @throws IOException ************************************************************************/ public LinkAnnotation(PDFObject annotObject) throws IOException { super(annotObject, ANNOTATION_TYPE.LINK); // a link annotation can either have an action (GoTo or URI) or a destination (DEST) PDFObject actionObj = annotObject.getDictRef("A"); if (actionObj != null) { this.action = PDFAction.getAction(actionObj, annotObject.getRoot()); } else { // if a destination is given, create a GoToAction from it PDFObject dest = annotObject.getDictRef("Dest"); if(dest == null) { dest = annotObject.getDictRef("DEST"); } if (dest != null) { this.action = new GoToAction(PDFDestination.getDestination(dest, annotObject.getRoot())); } else { throw new PDFParseException( "Could not parse link annotation (no Action or Destination found): " + annotObject.toString()); } } } /************************************************************************* * Get the contained PDFAction * @return PDFAction - can be <code>null</code> in case the contains * a destination object ************************************************************************/ public PDFAction getAction() { return this.action; } }