Class PDFPage


  • public class PDFPage
    extends java.lang.Object
    A PDFPage encapsulates the parsed commands required to render a single page from a PDFFile. The PDFPage is not itself drawable; instead, create a PDFImage to display something on the screen.

    This file also contains all of the PDFCmd commands that might be a part of the command stream in a PDFPage. They probably should be inner classes of PDFPage instead of separate non-public classes.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.awt.geom.Rectangle2D bbox
      the bounding box of the page, in page coordinates
      private Cache cache
      a map from image info (width, height, clip) to a soft reference to the rendered image
      private java.util.List<PDFCmd> commands
      the array of commands.
      private boolean finished
      whether this page has been finished.
      private int pageNumber
      the page number used to find this page
      private java.util.Map<ImageInfo,​java.lang.ref.WeakReference> renderers
      a map from image info to weak references to parsers that are active
      private int rotation
      the rotation of this page, in degrees
    • Constructor Summary

      Constructors 
      Constructor Description
      PDFPage​(int pageNumber, java.awt.geom.Rectangle2D bbox, int rotation, Cache cache)
      create a PDFPage with dimensions in bbox and rotation.
      PDFPage​(java.awt.geom.Rectangle2D bbox, int rotation)
      create a PDFPage with dimensions in bbox and rotation.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addCommand​(PDFCmd cmd)
      Add a single command to the page list.
      void addCommands​(PDFPage page)
      add a collection of commands to the page list.
      void addCommands​(PDFPage page, java.awt.geom.AffineTransform extra)
      add a collection of commands to the page list.
      void addDash​(float[] dashary, float phase)
      set the dash style
      void addEndCap​(int capstyle)
      set the end cap style
      void addFillAlpha​(float a)
      set the fill alpha
      void addFillPaint​(PDFPaint p)
      set the fill paint
      void addImage​(PDFImage image)
      draw an image
      void addLineJoin​(int joinstyle)
      set the line join style
      void addMiterLimit​(float limit)
      set the miter limit
      void addPath​(java.awt.geom.GeneralPath path, int style)
      set the current path
      void addPop()
      pop the graphics state
      void addPush()
      push the graphics state
      void addStrokeAlpha​(float a)
      set the stroke alpha
      void addStrokePaint​(PDFPaint p)
      set the stroke paint
      void addStrokeWidth​(float w)
      set the stroke width
      void addXform​(java.awt.geom.AffineTransform at)
      concatenate a transform to the graphics state
      void clearCommands()
      Clear all commands off the current page
      void finish()
      The entire page is done.
      float getAspectRatio()
      get the aspect ratio of the correctly oriented page.
      java.awt.geom.Rectangle2D getBBox()
      get the bounding box of the page, before any rotation.
      PDFCmd getCommand​(int index)
      get the command at a given index
      int getCommandCount()
      get the current number of commands for this page
      java.util.List<PDFCmd> getCommands()
      get all the commands in the current page
      java.util.List getCommands​(int startIndex)
      get all the commands in the current page starting at the given index
      java.util.List getCommands​(int startIndex, int endIndex)  
      float getHeight()
      get the height of this page, after rotation
      java.awt.Image getImage​(int width, int height, java.awt.geom.Rectangle2D clip, java.awt.image.ImageObserver observer)
      Get an image producer which can be used to draw the image represented by this PDFPage.
      java.awt.Image getImage​(int width, int height, java.awt.geom.Rectangle2D clip, java.awt.image.ImageObserver observer, boolean drawbg, boolean wait)
      Get an image producer which can be used to draw the image represented by this PDFPage.
      java.awt.geom.AffineTransform getInitialTransform​(int width, int height, java.awt.geom.Rectangle2D clip)
      Get the initial transform to map from a specified clip rectangle in pdf coordinates to an image of the specfied width and height in device coordinates
      int getPageNumber()
      get the page number used to lookup this page
      int getRotation()
      get the rotation of this image
      java.awt.Dimension getUnstretchedSize​(int width, int height, java.awt.geom.Rectangle2D clip)
      Get the width and height of this image in the correct aspect ratio.
      float getWidth()
      get the width of this page, after rotation
      boolean isFinished()
      get whether parsing for this PDFPage has been completed and all commands are in place.
      void stop​(int width, int height, java.awt.geom.Rectangle2D clip)
      Stop the rendering of a particular image on this page
      void updateImages()
      Notify all images we know about that a command has been added
      void waitForFinish()
      wait for finish
      • Methods inherited from class java.lang.Object

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

      • commands

        private java.util.List<PDFCmd> commands
        the array of commands. The length of this array will always be greater than or equal to the actual number of commands.
      • finished

        private boolean finished
        whether this page has been finished. If true, there will be no more commands added to the cmds list.
      • pageNumber

        private int pageNumber
        the page number used to find this page
      • bbox

        private java.awt.geom.Rectangle2D bbox
        the bounding box of the page, in page coordinates
      • rotation

        private int rotation
        the rotation of this page, in degrees
      • cache

        private Cache cache
        a map from image info (width, height, clip) to a soft reference to the rendered image
      • renderers

        private java.util.Map<ImageInfo,​java.lang.ref.WeakReference> renderers
        a map from image info to weak references to parsers that are active
    • Constructor Detail

      • PDFPage

        public PDFPage​(java.awt.geom.Rectangle2D bbox,
                       int rotation)
        create a PDFPage with dimensions in bbox and rotation.
      • PDFPage

        public PDFPage​(int pageNumber,
                       java.awt.geom.Rectangle2D bbox,
                       int rotation,
                       Cache cache)
        create a PDFPage with dimensions in bbox and rotation.
    • Method Detail

      • getUnstretchedSize

        public java.awt.Dimension getUnstretchedSize​(int width,
                                                     int height,
                                                     java.awt.geom.Rectangle2D clip)
        Get the width and height of this image in the correct aspect ratio. The image returned will have at least one of the width and height values identical to those requested. The other dimension may be smaller, so as to keep the aspect ratio the same as in the original page.
        Parameters:
        width - the maximum width of the image
        height - the maximum height of the image
        clip - the region in page space of the page to display. It may be null, in which the page's defined crop box will be used.
      • getImage

        public java.awt.Image getImage​(int width,
                                       int height,
                                       java.awt.geom.Rectangle2D clip,
                                       java.awt.image.ImageObserver observer)
        Get an image producer which can be used to draw the image represented by this PDFPage. The ImageProducer is guaranteed to stay in sync with the PDFPage as commands are added to it. The image will contain the section of the page specified by the clip, scaled to fit in the area given by width and height.
        Parameters:
        width - the width of the image to be produced
        height - the height of the image to be produced
        clip - the region in page space of the entire page to display
        observer - an image observer who will be notified when the image changes, or null
        Returns:
        an Image that contains the PDF data
      • getImage

        public java.awt.Image getImage​(int width,
                                       int height,
                                       java.awt.geom.Rectangle2D clip,
                                       java.awt.image.ImageObserver observer,
                                       boolean drawbg,
                                       boolean wait)
        Get an image producer which can be used to draw the image represented by this PDFPage. The ImageProducer is guaranteed to stay in sync with the PDFPage as commands are added to it. The image will contain the section of the page specified by the clip, scaled to fit in the area given by width and height.
        Parameters:
        width - the width of the image to be produced
        height - the height of the image to be produced
        clip - the region in page space of the entire page to display
        observer - an image observer who will be notified when the image changes, or null
        drawbg - if true, put a white background on the image. If not, draw no color (alpha 0) for the background.
        wait - if true, do not return until this image is fully rendered.
        Returns:
        an Image that contains the PDF data
      • getPageNumber

        public int getPageNumber()
        get the page number used to lookup this page
        Returns:
        the page number
      • getAspectRatio

        public float getAspectRatio()
        get the aspect ratio of the correctly oriented page.
        Returns:
        the width/height aspect ratio of the page
      • getBBox

        public java.awt.geom.Rectangle2D getBBox()
        get the bounding box of the page, before any rotation.
      • getWidth

        public float getWidth()
        get the width of this page, after rotation
      • getHeight

        public float getHeight()
        get the height of this page, after rotation
      • getRotation

        public int getRotation()
        get the rotation of this image
      • getInitialTransform

        public java.awt.geom.AffineTransform getInitialTransform​(int width,
                                                                 int height,
                                                                 java.awt.geom.Rectangle2D clip)
        Get the initial transform to map from a specified clip rectangle in pdf coordinates to an image of the specfied width and height in device coordinates
        Parameters:
        width - the width of the image
        height - the height of the image
        clip - the desired clip rectangle (in PDF space) or null to use the page's bounding box
      • getCommandCount

        public int getCommandCount()
        get the current number of commands for this page
      • getCommand

        public PDFCmd getCommand​(int index)
        get the command at a given index
      • getCommands

        public java.util.List<PDFCmd> getCommands()
        get all the commands in the current page
      • getCommands

        public java.util.List getCommands​(int startIndex)
        get all the commands in the current page starting at the given index
      • getCommands

        public java.util.List getCommands​(int startIndex,
                                          int endIndex)
      • addCommand

        public void addCommand​(PDFCmd cmd)
        Add a single command to the page list.
      • addCommands

        public void addCommands​(PDFPage page)
        add a collection of commands to the page list. This is probably invoked as the result of an XObject 'do' command, or through a type 3 font.
      • addCommands

        public void addCommands​(PDFPage page,
                                java.awt.geom.AffineTransform extra)
        add a collection of commands to the page list. This is probably invoked as the result of an XObject 'do' command, or through a type 3 font.
        Parameters:
        page - the source of other commands. It MUST be finished.
        extra - a transform to perform before adding the commands. If null, no extra transform will be added.
      • clearCommands

        public void clearCommands()
        Clear all commands off the current page
      • isFinished

        public boolean isFinished()
        get whether parsing for this PDFPage has been completed and all commands are in place.
      • waitForFinish

        public void waitForFinish()
                           throws java.lang.InterruptedException
        wait for finish
        Throws:
        java.lang.InterruptedException
      • stop

        public void stop​(int width,
                         int height,
                         java.awt.geom.Rectangle2D clip)
        Stop the rendering of a particular image on this page
      • finish

        public void finish()
        The entire page is done. This must only be invoked once. All observers will be notified.
      • addPush

        public void addPush()
        push the graphics state
      • addPop

        public void addPop()
        pop the graphics state
      • addXform

        public void addXform​(java.awt.geom.AffineTransform at)
        concatenate a transform to the graphics state
      • addStrokeWidth

        public void addStrokeWidth​(float w)
        set the stroke width
        Parameters:
        w - the width of the stroke
      • addEndCap

        public void addEndCap​(int capstyle)
        set the end cap style
        Parameters:
        capstyle - the cap style: 0 = BUTT, 1 = ROUND, 2 = SQUARE
      • addLineJoin

        public void addLineJoin​(int joinstyle)
        set the line join style
        Parameters:
        joinstyle - the join style: 0 = MITER, 1 = ROUND, 2 = BEVEL
      • addMiterLimit

        public void addMiterLimit​(float limit)
        set the miter limit
      • addDash

        public void addDash​(float[] dashary,
                            float phase)
        set the dash style
        Parameters:
        dashary - the array of on-off lengths
        phase - offset of the array at the start of the line drawing
      • addPath

        public void addPath​(java.awt.geom.GeneralPath path,
                            int style)
        set the current path
        Parameters:
        path - the path
        style - the style: PDFShapeCmd.STROKE, PDFShapeCmd.FILL, PDFShapeCmd.BOTH, PDFShapeCmd.CLIP, or some combination.
      • addFillPaint

        public void addFillPaint​(PDFPaint p)
        set the fill paint
      • addStrokePaint

        public void addStrokePaint​(PDFPaint p)
        set the stroke paint
      • addFillAlpha

        public void addFillAlpha​(float a)
        set the fill alpha
      • addStrokeAlpha

        public void addStrokeAlpha​(float a)
        set the stroke alpha
      • addImage

        public void addImage​(PDFImage image)
        draw an image
        Parameters:
        image - the image to draw
      • updateImages

        public void updateImages()
        Notify all images we know about that a command has been added