com.sun.pdfview
Class PDFPage

java.lang.Object
  extended by 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
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
 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