Class SimpleBookmark

  • All Implemented Interfaces:
    SimpleXMLDocHandler

    public final class SimpleBookmark
    extends java.lang.Object
    implements SimpleXMLDocHandler
    Bookmark processing in a simple way. It has some limitations, mainly the only action types supported are GoTo, GoToR, URI and Launch.

    The list structure is composed by a number of HashMap, keyed by strings, one HashMap for each bookmark. The element values are all strings with the exception of the key "Kids" that has another list for the child bookmarks.

    All the bookmarks have a "Title" with the bookmark title and optionally a "Style" that can be "bold", "italic" or a combination of both. They can also have a "Color" key with a value of three floats with values in the range 0.0 to 1.0 separated by spaces. The key "Open" can have the values "true" or "false" and signals the open status of the children. It's "true" by default.

    The actions and the parameters can be:

    • "Action" = "GoTo" - "Page" | "Named"
      • "Page" = "3 XYZ 70 400 null" - page number followed by a destination (/XYZ is also accepted)
      • "Named" = "named_destination"
    • "Action" = "GoToR" - "Page" | "Named" | "NamedN", "File", ["NewWindow"]
      • "Page" = "3 XYZ 70 400 null" - page number followed by a destination (/XYZ is also accepted)
      • "Named" = "named_destination_as_a_string"
      • "NamedN" = "named_destination_as_a_name"
      • "File" - "the_file_to_open"
      • "NewWindow" - "true" or "false"
    • "Action" = "URI" - "URI"
      • "URI" = "http://sf.net" - URI to jump to
    • "Action" = "Launch" - "File"
      • "File" - "the_file_to_open_or_execute"
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.util.Stack<java.util.HashMap<java.lang.String,​java.lang.Object>> attr  
      private java.util.ArrayList<java.util.HashMap<java.lang.String,​java.lang.Object>> topList  
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private SimpleBookmark()
      Creates a new instance of SimpleBookmark
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private static java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> bookmarkDepth​(PdfReader reader, PdfDictionary outline, IntHashtable pages, boolean processCurrentOutlineOnly)  
      (package private) static void createOutlineAction​(PdfDictionary outline, java.util.HashMap<java.lang.String,​java.lang.Object> map, PdfWriter writer, boolean namedAsNames)  
      static void eliminatePages​(java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> list, int[] pageRange)
      Removes the bookmark entries for a number of page ranges.
      void endDocument()
      Called after the document is parsed.
      void endElement​(java.lang.String tag)
      Called when an end tag is found.
      static void exportToXML​(java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> list, java.io.OutputStream out, java.lang.String encoding, boolean onlyASCII)
      Exports the bookmarks to XML.
      static void exportToXML​(java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> list, java.io.Writer wrt, java.lang.String encoding, boolean onlyASCII)
      Exports the bookmarks to XML.
      static void exportToXMLNode​(java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> list, java.io.Writer out, int indent, boolean onlyASCII)
      Exports the bookmarks to XML.
      static java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> getBookmark​(PdfReader reader)
      Gets a List with the bookmarks.
      static java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> getBookmark​(PdfReader reader, PdfDictionary outline, boolean includeRoot)
      Gets a List with the bookmarks that are children of outline.
      private static int getNumber​(PdfIndirectReference indirect)
      Gets number of indirect.
      static java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> importFromXML​(java.io.InputStream in)
      Import the bookmarks from XML.
      static java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> importFromXML​(java.io.Reader in)
      Import the bookmarks from XML.
      static java.lang.Object[] iterateOutlines​(PdfWriter writer, PdfIndirectReference parent, java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> kids, boolean namedAsNames)  
      private static java.lang.String makeBookmarkParam​(PdfArray dest, IntHashtable pages)  
      private static void mapGotoBookmark​(java.util.HashMap<java.lang.String,​java.lang.Object> map, PdfObject dest, IntHashtable pages)  
      static void shiftPageNumbers​(java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> list, int pageShift, int[] pageRange)
      For the pages in range add the pageShift to the page number.
      void startDocument()
      Called when the document starts to be parsed.
      void startElement​(java.lang.String tag, java.util.Map<java.lang.String,​java.lang.String> h)
      Called when a start tag is found.
      void text​(java.lang.String str)
      Called when a text element is found.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • topList

        private java.util.ArrayList<java.util.HashMap<java.lang.String,​java.lang.Object>> topList
      • attr

        private final java.util.Stack<java.util.HashMap<java.lang.String,​java.lang.Object>> attr
    • Constructor Detail

      • SimpleBookmark

        private SimpleBookmark()
        Creates a new instance of SimpleBookmark
    • Method Detail

      • bookmarkDepth

        private static java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> bookmarkDepth​(PdfReader reader,
                                                                                                                PdfDictionary outline,
                                                                                                                IntHashtable pages,
                                                                                                                boolean processCurrentOutlineOnly)
      • mapGotoBookmark

        private static void mapGotoBookmark​(java.util.HashMap<java.lang.String,​java.lang.Object> map,
                                            PdfObject dest,
                                            IntHashtable pages)
      • makeBookmarkParam

        private static java.lang.String makeBookmarkParam​(PdfArray dest,
                                                          IntHashtable pages)
      • getNumber

        private static int getNumber​(PdfIndirectReference indirect)
        Gets number of indirect. If type of directed indirect is PAGES, it refers PAGE object through KIDS. (Contributed by Kazuya Ujihara)
        Parameters:
        indirect - 2004-06-13
      • getBookmark

        public static java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> getBookmark​(PdfReader reader)
        Gets a List with the bookmarks. It returns null if the document doesn't have any bookmarks.
        Parameters:
        reader - the document
        Returns:
        a List with the bookmarks or null if the document doesn't have any
      • getBookmark

        public static java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> getBookmark​(PdfReader reader,
                                                                                                             PdfDictionary outline,
                                                                                                             boolean includeRoot)
        Gets a List with the bookmarks that are children of outline. It returns null if the document doesn't have any bookmarks.
        Parameters:
        reader - the document
        outline - the outline dictionary to get bookmarks from
        includeRoot - indicates if to include outline parameter itself into returned list of bookmarks
        Returns:
        a List with the bookmarks or null if the document doesn't have any
      • eliminatePages

        public static void eliminatePages​(java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> list,
                                          int[] pageRange)
        Removes the bookmark entries for a number of page ranges. The page ranges consists of a number of pairs with the start/end page range. The page numbers are inclusive.
        Parameters:
        list - the bookmarks
        pageRange - the page ranges, always in pairs.
      • shiftPageNumbers

        public static void shiftPageNumbers​(java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> list,
                                            int pageShift,
                                            int[] pageRange)
        For the pages in range add the pageShift to the page number. The page ranges consists of a number of pairs with the start/end page range. The page numbers are inclusive.
        Parameters:
        list - the bookmarks
        pageShift - the number to add to the pages in range
        pageRange - the page ranges, always in pairs. It can be null to include all the pages
      • createOutlineAction

        static void createOutlineAction​(PdfDictionary outline,
                                        java.util.HashMap<java.lang.String,​java.lang.Object> map,
                                        PdfWriter writer,
                                        boolean namedAsNames)
      • iterateOutlines

        public static java.lang.Object[] iterateOutlines​(PdfWriter writer,
                                                         PdfIndirectReference parent,
                                                         java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> kids,
                                                         boolean namedAsNames)
                                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • exportToXMLNode

        public static void exportToXMLNode​(java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> list,
                                           java.io.Writer out,
                                           int indent,
                                           boolean onlyASCII)
                                    throws java.io.IOException
        Exports the bookmarks to XML. Only of use if the generation is to be include in some other XML document.
        Parameters:
        list - the bookmarks
        out - the export destination. The writer is not closed
        indent - the indentation level. Pretty printing significant only. Use -1 for no indents.
        onlyASCII - codes above 127 will always be escaped with &#nn; if true, whatever the encoding
        Throws:
        java.io.IOException - on error
        Since:
        5.0.1 (generic type in signature)
      • exportToXML

        public static void exportToXML​(java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> list,
                                       java.io.OutputStream out,
                                       java.lang.String encoding,
                                       boolean onlyASCII)
                                throws java.io.IOException
        Exports the bookmarks to XML. The DTD for this XML is:

         <?xml version='1.0' encoding='UTF-8'?>
         <!ELEMENT Title (#PCDATA|Title)*>
         <!ATTLIST Title
            Action CDATA #IMPLIED
            Open CDATA #IMPLIED
            Page CDATA #IMPLIED
            URI CDATA #IMPLIED
            File CDATA #IMPLIED
            Named CDATA #IMPLIED
            NamedN CDATA #IMPLIED
            NewWindow CDATA #IMPLIED
            Style CDATA #IMPLIED
            Color CDATA #IMPLIED
         >
         <!ELEMENT Bookmark (Title)*>
         
        Parameters:
        list - the bookmarks
        out - the export destination. The stream is not closed
        encoding - the encoding according to IANA conventions
        onlyASCII - codes above 127 will always be escaped with &#nn; if true, whatever the encoding
        Throws:
        java.io.IOException - on error
        Since:
        5.0.1 (generic type in signature)
      • exportToXML

        public static void exportToXML​(java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> list,
                                       java.io.Writer wrt,
                                       java.lang.String encoding,
                                       boolean onlyASCII)
                                throws java.io.IOException
        Exports the bookmarks to XML.
        Parameters:
        list - the bookmarks
        wrt - the export destination. The writer is not closed
        encoding - the encoding according to IANA conventions
        onlyASCII - codes above 127 will always be escaped with &#nn; if true, whatever the encoding
        Throws:
        java.io.IOException - on error
        Since:
        5.0.1 (generic type in signature)
      • importFromXML

        public static java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> importFromXML​(java.io.InputStream in)
                                                                                                        throws java.io.IOException
        Import the bookmarks from XML.
        Parameters:
        in - the XML source. The stream is not closed
        Returns:
        the bookmarks
        Throws:
        java.io.IOException - on error
      • importFromXML

        public static java.util.List<java.util.HashMap<java.lang.String,​java.lang.Object>> importFromXML​(java.io.Reader in)
                                                                                                        throws java.io.IOException
        Import the bookmarks from XML.
        Parameters:
        in - the XML source. The reader is not closed
        Returns:
        the bookmarks
        Throws:
        java.io.IOException - on error
      • endElement

        public void endElement​(java.lang.String tag)
        Description copied from interface: SimpleXMLDocHandler
        Called when an end tag is found.
        Specified by:
        endElement in interface SimpleXMLDocHandler
        Parameters:
        tag - the tag name
      • startElement

        public void startElement​(java.lang.String tag,
                                 java.util.Map<java.lang.String,​java.lang.String> h)
        Description copied from interface: SimpleXMLDocHandler
        Called when a start tag is found.
        Specified by:
        startElement in interface SimpleXMLDocHandler
        Parameters:
        tag - the tag name
        h - the tag's attributes
      • text

        public void text​(java.lang.String str)
        Description copied from interface: SimpleXMLDocHandler
        Called when a text element is found.
        Specified by:
        text in interface SimpleXMLDocHandler
        Parameters:
        str - the text element, probably a fragment.