com.sun.pdfview

## Class PDFPage

- java.lang.Object
- - com.sun.pdfview.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.

### Constructor Summary

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

### Method Summary

Methods
`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 post-rotation box placed at 0, 0 in page units
`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, in page points, 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
`java.awt.geom.Rectangle2D` `getPageBox()` Get the original crop/media box of the page, in page units, before any rotation and with clipping co-ordinates
`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, in page points, 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`

### 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

Parameters:
  `pageNumber` - the page number
  `bbox` - the bounding box, specified in pre-rotation page co-ordinates
  `rotation` - the rotation to apply to the page; must be 0/90/180/270
  `cache` - a cache to use

### 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 co-ordinates of the page to display. It may be null, in which the page crop/media box is 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

#### getPageBox

    public java.awt.geom.Rectangle2D getPageBox()

Get the original crop/media box of the page, in page units, before any rotation and with clipping co-ordinates

Returns:
  the page box

#### getBBox

    public java.awt.geom.Rectangle2D getBBox()

get the post-rotation box placed at 0, 0 in page units

#### getWidth

    public float getWidth()

get the width of this page, in page points, after rotation

#### getHeight

    public float getHeight()

get the height of this page, in page points, 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 target image
  `height` - the height of the target image
  `clip` - the desired clip rectangle to use in page co-ordinates; use `null` to draw the page crop/media 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