Class PDPageTree

  • All Implemented Interfaces:
    java.lang.Iterable<PDPage>, COSObjectable

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

      • LOG

        private static final org.apache.commons.logging.Log LOG
    • Constructor Detail

      • 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 Detail

      • 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 java.util.Iterator<PDPage> iterator()
        Returns an iterator which walks all pages in the tree, in order.
        Specified by:
        iterator in interface java.lang.Iterable<PDPage>
      • getKids

        private java.util.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:
        java.lang.IllegalStateException - if the requested index isn't found or doesn't point to a valid page dictionary
        java.lang.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:
        java.lang.IllegalStateException - if the requested page number isn't found
        java.lang.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.
      • 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:
        java.lang.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:
        java.lang.IllegalArgumentException - if one attempts to insert a page that isn't part of a page tree.
      • increaseParents

        private void increaseParents​(COSDictionary parentDict)