Class PDPageTree

java.lang.Object
org.apache.pdfbox.pdmodel.PDPageTree
All Implemented Interfaces:
Iterable<PDPage>, COSObjectable

public class PDPageTree extends Object implements COSObjectable, Iterable<PDPage>
The page tree, which defines the ordering of pages in the document in an efficient manner.
  • Field Details

    • LOG

      private static final org.apache.commons.logging.Log LOG
    • root

      private final COSDictionary root
    • document

      private final PDDocument document
    • pageSet

      private final Set<COSDictionary> pageSet
  • Constructor Details

    • PDPageTree

      public PDPageTree()
      Constructor for embedding.
    • PDPageTree

      public PDPageTree(COSDictionary root)
      Constructor for reading.
      Parameters:
      root - A page tree root.
    • PDPageTree

      PDPageTree(COSDictionary root, PDDocument document)
      Constructor for reading.
      Parameters:
      root - A page tree root.
      document - The document which contains "root".
  • Method Details

    • getInheritableAttribute

      public static COSBase getInheritableAttribute(COSDictionary node, COSName key)
      Returns the given attribute, inheriting from parent tree nodes if necessary.
      Parameters:
      node - page object
      key - the key to look up
      Returns:
      COS value for the given key
    • iterator

      public Iterator<PDPage> iterator()
      Returns an iterator which walks all pages in the tree, in order.
      Specified by:
      iterator in interface Iterable<PDPage>
    • getKids

      private List<COSDictionary> getKids(COSDictionary node)
      Helper to get kids from malformed PDFs.
      Parameters:
      node - page tree node
      Returns:
      list of kids
    • get

      public PDPage get(int index)
      Returns the page at the given index.
      Parameters:
      index - zero-based index
      Throws:
      IllegalStateException - if the requested index isn't found or doesn't point to a valid page dictionary
      IndexOutOfBoundsException - if the requested index is higher than the page count
    • sanitizeType

      private static void sanitizeType(COSDictionary dictionary)
    • get

      private COSDictionary get(int pageNum, COSDictionary node, int encountered)
      Returns the given COS page using a depth-first search.
      Parameters:
      pageNum - 1-based page number
      node - page tree node to search
      encountered - number of pages encountered so far
      Returns:
      COS dictionary of the Page object
      Throws:
      IllegalStateException - if the requested page number isn't found
      IndexOutOfBoundsException - if the requested page number is higher than the page count
    • isPageTreeNode

      private boolean isPageTreeNode(COSDictionary node)
      Returns true if the node is a page tree node (i.e. and intermediate).
    • indexOf

      public int indexOf(PDPage page)
      Returns the index of the given page, or -1 if it does not exist.
      Parameters:
      page - The page to search for.
      Returns:
      the zero-based index of the given page, or -1 if the page is not found.
    • findPage

      private boolean findPage(PDPageTree.SearchContext context, COSDictionary node)
    • getCount

      public int getCount()
      Returns the number of leaf nodes (page objects) that are descendants of this root within the page tree.
      Returns:
      the number of leaf nodes.
    • getCOSObject

      public COSDictionary getCOSObject()
      Description copied from interface: COSObjectable
      Convert this standard java object to a COS object.
      Specified by:
      getCOSObject in interface COSObjectable
      Returns:
      The cos object that matches this Java object.
    • remove

      public void remove(int index)
      Removes the page with the given index from the page tree.
      Parameters:
      index - zero-based page index
    • remove

      public void remove(PDPage page)
      Removes the given page from the page tree.
      Parameters:
      page - The page to remove.
    • remove

      private void remove(COSDictionary node)
      Removes the given COS page.
    • add

      public void add(PDPage page)
      Adds the given page to this page tree.
      Parameters:
      page - The page to add.
    • insertBefore

      public void insertBefore(PDPage newPage, PDPage nextPage)
      Insert a page before another page within a page tree.
      Parameters:
      newPage - the page to be inserted.
      nextPage - the page that is to be after the new page.
      Throws:
      IllegalArgumentException - if one attempts to insert a page that isn't part of a page tree.
    • insertAfter

      public void insertAfter(PDPage newPage, PDPage prevPage)
      Insert a page after another page within a page tree.
      Parameters:
      newPage - the page to be inserted.
      prevPage - the page that is to be before the new page.
      Throws:
      IllegalArgumentException - if one attempts to insert a page that isn't part of a page tree.
    • increaseParents

      private void increaseParents(COSDictionary parentDict)