Package 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.
-
-
Field Summary
Fields Modifier and Type Field Description private java.awt.geom.Rectangle2D
bbox
the bounding box of the page, in page coordinatesprivate Cache
cache
a map from image info (width, height, clip) to a soft reference to the rendered imageprivate 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 pageprivate java.util.Map<ImageInfo,java.lang.ref.WeakReference>
renderers
a map from image info to weak references to parsers that are activeprivate 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 stylevoid
addEndCap(int capstyle)
set the end cap stylevoid
addFillAlpha(float a)
set the fill alphavoid
addFillPaint(PDFPaint p)
set the fill paintvoid
addImage(PDFImage image)
draw an imagevoid
addLineJoin(int joinstyle)
set the line join stylevoid
addMiterLimit(float limit)
set the miter limitvoid
addPath(java.awt.geom.GeneralPath path, int style)
set the current pathvoid
addPop()
pop the graphics statevoid
addPush()
push the graphics statevoid
addStrokeAlpha(float a)
set the stroke alphavoid
addStrokePaint(PDFPaint p)
set the stroke paintvoid
addStrokeWidth(float w)
set the stroke widthvoid
addXform(java.awt.geom.AffineTransform at)
concatenate a transform to the graphics statevoid
clearCommands()
Clear all commands off the current pagevoid
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 indexint
getCommandCount()
get the current number of commands for this pagejava.util.List<PDFCmd>
getCommands()
get all the commands in the current pagejava.util.List
getCommands(int startIndex)
get all the commands in the current page starting at the given indexjava.util.List
getCommands(int startIndex, int endIndex)
float
getHeight()
get the height of this page, after rotationjava.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 coordinatesint
getPageNumber()
get the page number used to lookup this pageint
getRotation()
get the rotation of this imagejava.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 rotationboolean
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 pagevoid
updateImages()
Notify all images we know about that a command has been addedvoid
waitForFinish()
wait for finish
-
-
-
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 imageheight
- the maximum height of the imageclip
- 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 producedheight
- the height of the image to be producedclip
- the region in page space of the entire page to displayobserver
- 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 producedheight
- the height of the image to be producedclip
- the region in page space of the entire page to displayobserver
- an image observer who will be notified when the image changes, or nulldrawbg
- 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 imageheight
- the height of the imageclip
- 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 lengthsphase
- 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 pathstyle
- 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
-
-