com.sun.pdfview
Class PDFRenderer

java.lang.Object
  extended by com.sun.pdfview.BaseWatchable
      extended by com.sun.pdfview.PDFRenderer
All Implemented Interfaces:
Watchable, java.lang.Runnable

public class PDFRenderer
extends BaseWatchable
implements java.lang.Runnable

This class turns a set of PDF Commands from a PDF page into an image. It encapsulates the state of drawing in terms of stroke, fill, transform, etc., as well as pushing and popping these states. When the run method is called, this class goes through all remaining commands in the PDF Page and draws them to its buffered image. It then updates any ImageConsumers with the drawn data.


Field Summary
static int NOCAP
           
static float[] NODASH
           
static int NOJOIN
           
static float NOLIMIT
           
static float NOPHASE
           
static float NOWIDTH
           
static long UPDATE_DURATION
          how long (in milliseconds) to wait between image updates
 
Fields inherited from interface com.sun.pdfview.Watchable
COMPLETED, ERROR, NEEDS_DATA, NOT_STARTED, PAUSED, RUNNING, STOPPED, UNKNOWN
 
Constructor Summary
PDFRenderer(PDFPage page, java.awt.Graphics2D g, java.awt.Rectangle imgbounds, java.awt.geom.Rectangle2D clip, java.awt.Color bgColor)
          create a new PDFGraphics state, given a Graphics2D.
PDFRenderer(PDFPage page, ImageInfo imageinfo, java.awt.image.BufferedImage bi)
          create a new PDFGraphics state
 
Method Summary
 void addObserver(java.awt.image.ImageObserver observer)
          Add an image observer
 void cleanup()
          Called when iteration has stopped
 void clip(java.awt.geom.GeneralPath s)
          add the path to the current clip.
 void draw(java.awt.geom.GeneralPath p, java.awt.BasicStroke bs)
          draw an outline.
 java.awt.geom.Rectangle2D drawImage(PDFImage image)
          draw an image.
 java.awt.geom.Rectangle2D fill(java.awt.geom.GeneralPath s)
          fill an outline using the current fill paint
 java.awt.geom.AffineTransform getInitialTransform()
          get the initial transform from page space to Java space
 java.awt.geom.GeneralPath getLastShape()
          Get the last shape drawn
 java.awt.BasicStroke getStroke()
          get the current stroke as a BasicStroke
 java.awt.geom.AffineTransform getTransform()
          get the current affinetransform
 int iterate()
          Draws the next command in the PDFPage to the buffered image.
 void pop()
          restore the state of this object to what it was when the previous push() was called.
 void push()
          push the current graphics state onto the stack.
 void removeObserver(java.awt.image.ImageObserver observer)
          Remove an image observer
 void setFillAlpha(float alpha)
          set the stroke alpha
 void setFillPaint(PDFPaint paint)
          set the fill color
 void setLastShape(java.awt.geom.GeneralPath shape)
          Set the last shape drawn
 void setStroke(java.awt.BasicStroke bs)
          set the current stroke as a BasicStroke
 void setStrokeAlpha(float alpha)
          set the stroke alpha
 void setStrokePaint(PDFPaint paint)
          set the stroke color
 void setStrokeParts(float w, int cap, int join, float limit, float[] ary, float phase)
          Set some or all aspects of the current stroke.
 void setTransform(java.awt.geom.AffineTransform at)
          replace the current transform with the given one.
 void setup()
          Setup rendering.
 java.awt.geom.Rectangle2D stroke(java.awt.geom.GeneralPath s)
          draw an outline using the current stroke and draw paint
 void transform(java.awt.geom.AffineTransform at)
          concatenate the given transform with the current transform
 
Methods inherited from class com.sun.pdfview.BaseWatchable
execute, getStatus, go, go, go, go, isExecutable, isFinished, isSuppressSetErrorStackTrace, run, setError, setStatus, setSuppressSetErrorStackTrace, stop, waitForFinish
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface java.lang.Runnable
run
 

Field Detail

UPDATE_DURATION

public static final long UPDATE_DURATION
how long (in milliseconds) to wait between image updates

See Also:
Constant Field Values

NOPHASE

public static final float NOPHASE
See Also:
Constant Field Values

NOWIDTH

public static final float NOWIDTH
See Also:
Constant Field Values

NOLIMIT

public static final float NOLIMIT
See Also:
Constant Field Values

NOCAP

public static final int NOCAP
See Also:
Constant Field Values

NODASH

public static final float[] NODASH

NOJOIN

public static final int NOJOIN
See Also:
Constant Field Values
Constructor Detail

PDFRenderer

public PDFRenderer(PDFPage page,
                   ImageInfo imageinfo,
                   java.awt.image.BufferedImage bi)
create a new PDFGraphics state

Parameters:
page - the current page
imageinfo - the paramters of the image to render

PDFRenderer

public PDFRenderer(PDFPage page,
                   java.awt.Graphics2D g,
                   java.awt.Rectangle imgbounds,
                   java.awt.geom.Rectangle2D clip,
                   java.awt.Color bgColor)
create a new PDFGraphics state, given a Graphics2D. This version will not create an image, and you will get a NullPointerException if you attempt to call getImage().

Parameters:
page - the current page
g - the Graphics2D object to use for drawing
imgbounds - the bounds of the image into which to fit the page
clip - the portion of the page to draw, in page space, or null if the whole page should be drawn
bgColor - the color to draw the background of the image, or null for no color (0 alpha value)
Method Detail

push

public void push()
push the current graphics state onto the stack. Continue working with the current object; calling pop() restores the state of this object to its state when push() was called.


pop

public void pop()
restore the state of this object to what it was when the previous push() was called.


stroke

public java.awt.geom.Rectangle2D stroke(java.awt.geom.GeneralPath s)
draw an outline using the current stroke and draw paint

Parameters:
s - the path to stroke
Returns:
a Rectangle2D to which the current region being drawn will be added. May also be null, in which case no dirty region will be recorded.

draw

public void draw(java.awt.geom.GeneralPath p,
                 java.awt.BasicStroke bs)
draw an outline.

Parameters:
p - the path to draw
bs - the stroke with which to draw the path

fill

public java.awt.geom.Rectangle2D fill(java.awt.geom.GeneralPath s)
fill an outline using the current fill paint

Parameters:
s - the path to fill

drawImage

public java.awt.geom.Rectangle2D drawImage(PDFImage image)
draw an image.

Parameters:
image - the image to draw

clip

public void clip(java.awt.geom.GeneralPath s)
add the path to the current clip. The new clip will be the intersection of the old clip and given path.


getTransform

public java.awt.geom.AffineTransform getTransform()
get the current affinetransform


transform

public void transform(java.awt.geom.AffineTransform at)
concatenate the given transform with the current transform


setTransform

public void setTransform(java.awt.geom.AffineTransform at)
replace the current transform with the given one.


getInitialTransform

public java.awt.geom.AffineTransform getInitialTransform()
get the initial transform from page space to Java space


setStrokeParts

public void setStrokeParts(float w,
                           int cap,
                           int join,
                           float limit,
                           float[] ary,
                           float phase)
Set some or all aspects of the current stroke.

Parameters:
w - the width of the stroke, or NOWIDTH to leave it unchanged
cap - the end cap style, or NOCAP to leave it unchanged
join - the join style, or NOJOIN to leave it unchanged
limit - the miter limit, or NOLIMIT to leave it unchanged
phase - the phase of the dash array, or NOPHASE to leave it unchanged
ary - the dash array, or null to leave it unchanged. phase and ary must both be valid, or phase must be NOPHASE while ary is null.

getStroke

public java.awt.BasicStroke getStroke()
get the current stroke as a BasicStroke


setStroke

public void setStroke(java.awt.BasicStroke bs)
set the current stroke as a BasicStroke


setStrokePaint

public void setStrokePaint(PDFPaint paint)
set the stroke color


setFillPaint

public void setFillPaint(PDFPaint paint)
set the fill color


setStrokeAlpha

public void setStrokeAlpha(float alpha)
set the stroke alpha


setFillAlpha

public void setFillAlpha(float alpha)
set the stroke alpha


addObserver

public void addObserver(java.awt.image.ImageObserver observer)
Add an image observer


removeObserver

public void removeObserver(java.awt.image.ImageObserver observer)
Remove an image observer


setLastShape

public void setLastShape(java.awt.geom.GeneralPath shape)
Set the last shape drawn


getLastShape

public java.awt.geom.GeneralPath getLastShape()
Get the last shape drawn


setup

public void setup()
Setup rendering. Called before iteration begins

Overrides:
setup in class BaseWatchable

iterate

public int iterate()
            throws java.lang.Exception
Draws the next command in the PDFPage to the buffered image. The image will be notified about changes no less than every UPDATE_DURATION milliseconds.

Specified by:
iterate in class BaseWatchable
Returns:
  • Watchable.RUNNING when there are commands to be processed
  • Watchable.NEEDS_DATA when there are no commands to be processed, but the page is not yet complete
  • Watchable.COMPLETED when the page is done and all the commands have been processed
  • Watchable.STOPPED if the image we are rendering into has gone away
Throws:
java.lang.Exception

cleanup

public void cleanup()
Called when iteration has stopped

Overrides:
cleanup in class BaseWatchable