See package:org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline
See example:PrintBookmarks
A PDF can contain an outline of a document and jump to pages within a PDF document. An outline is a hierarchical tree structure of nodes that point to pages.
To access the root of the outline you go through the PDDocumentOutline
PDDocument doc = PDDocument.load( ... ); PDDocumentOutline root = doc.getDocumentCatalog().getDocumentOutline();
Now you can traverse the tree using the getFirstChild() and getNextSibling() functions.
PDOutlineItem item = root.getFirstChild(); while( item != null ) { System.out.println( "Item:" + item.getTitle() ); PDOutlineItem child = item.getFirstChild(); while( child != null ) { System.out.println( " Child:" + child.getTitle() ); child = child.getNextSibling(); } item = item.getNextSibling(); }
See example:CreateBookmarks
Creating bookmarks is just as easy. You first need to create the PDDocumentOutline and then add some PDOutlineItem objects to it.
//first create the document outline and add it to the page PDDocumentOutline outline = new PDDocumentOutline(); doc.getDocumentCatalog().setDocumentOutline( outline ); //Create a root element to show in the tree PDOutlineItem root = new PDOutlineItem(); root.setTitle( "Root of Document" ); outline.appendChild( root) //Get the page to refer to PDPage firstPage = (PDPage)doc.getAllPages().get( 0 ); //Create the outline item to refer to the first page. PDOutlineItem firstPageItem = new PDOutlineItem(); firstPageItem.setTitle( "First Page of document" ); firstPageItem.setDestination( firstPage ); root.appendChild( firstPageItem );
NOTE: By default all nodes in the outline tree are closed. You need to call openNode() if you want the node to be open when the document is opened.