Package com.itextpdf.text.pdf
Class SimpleBookmark
- java.lang.Object
-
- com.itextpdf.text.pdf.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"
-
-
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 aList
with the bookmarks.static java.util.List<java.util.HashMap<java.lang.String,java.lang.Object>>
getBookmark(PdfReader reader, PdfDictionary outline, boolean includeRoot)
Gets aList
with the bookmarks that are children ofoutline
.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 thepageShift
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.
-
-
-
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 aList
with the bookmarks. It returnsnull
if the document doesn't have any bookmarks.- Parameters:
reader
- the document- Returns:
- a
List
with the bookmarks ornull
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 aList
with the bookmarks that are children ofoutline
. It returnsnull
if the document doesn't have any bookmarks.- Parameters:
reader
- the documentoutline
- the outline dictionary to get bookmarks fromincludeRoot
- indicates if to includeoutline
parameter itself into returned list of bookmarks- Returns:
- a
List
with the bookmarks ornull
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 bookmarkspageRange
- 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 thepageShift
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 bookmarkspageShift
- the number to add to the pages in rangepageRange
- the page ranges, always in pairs. It can benull
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 bookmarksout
- the export destination. The writer is not closedindent
- the indentation level. Pretty printing significant only. Use-1
for no indents.onlyASCII
- codes above 127 will always be escaped with &#nn; iftrue
, 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 bookmarksout
- the export destination. The stream is not closedencoding
- the encoding according to IANA conventionsonlyASCII
- codes above 127 will always be escaped with &#nn; iftrue
, 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 bookmarkswrt
- the export destination. The writer is not closedencoding
- the encoding according to IANA conventionsonlyASCII
- codes above 127 will always be escaped with &#nn; iftrue
, 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
-
endDocument
public void endDocument()
Description copied from interface:SimpleXMLDocHandler
Called after the document is parsed.- Specified by:
endDocument
in interfaceSimpleXMLDocHandler
-
endElement
public void endElement(java.lang.String tag)
Description copied from interface:SimpleXMLDocHandler
Called when an end tag is found.- Specified by:
endElement
in interfaceSimpleXMLDocHandler
- Parameters:
tag
- the tag name
-
startDocument
public void startDocument()
Description copied from interface:SimpleXMLDocHandler
Called when the document starts to be parsed.- Specified by:
startDocument
in interfaceSimpleXMLDocHandler
-
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 interfaceSimpleXMLDocHandler
- Parameters:
tag
- the tag nameh
- 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 interfaceSimpleXMLDocHandler
- Parameters:
str
- the text element, probably a fragment.
-
-