Package org.apache.pdfbox.rendering
Class PageDrawer
java.lang.Object
org.apache.pdfbox.contentstream.PDFStreamEngine
org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine
org.apache.pdfbox.rendering.PageDrawer
Paints a page in a PDF document to a Graphics context. May be subclassed to provide custom
rendering.
If you want to do custom graphics processing rather than Graphics2D rendering, then you should
subclass PDFGraphicsStreamEngine instead. Subclassing PageDrawer is only suitable for
cases where the goal is to render onto a Graphics2D surface. In that case you'll also
have to subclass PDFRenderer and override
PDFRenderer.createPageDrawer(PageDrawerParameters). See the OpaquePDFRenderer.java
example in the source code download on how to do this.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate final classTransparency group. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate AnnotationFilterDefault annotations filter, returns all annotationsprivate intprivate final RenderDestinationprivate booleanprivate Graphics2Dprivate final floatprivate Shapeprivate LookupTableprivate static final booleanprivate static final booleanprivate GeneralPathprivate static final org.apache.commons.logging.Logprivate intprivate static final Stringprivate PDRectangleprivate final PDFRendererprivate final RenderingHintsprivate final booleanprivate final TilingPaintFactoryprivate final Deque<PageDrawer.TransparencyGroup>private AffineTransformprivate floatprivate float -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate BufferedImageadjustImage(BufferedImage gray) voidappendRectangle(Point2D p0, Point2D p1, Point2D p2, Point2D p3) Append a rectangle to the current path.private PaintapplySoftMaskToPaint(Paint parentPaint, PDSoftMask softMask) private BufferedImageapplyTransferFunction(BufferedImage image, COSBase transfer) voidbeginMarkedContentSequence(COSName tag, COSDictionary properties) Called when a marked content group beginsvoidCalled when the BT operator is encountered.private voidBegin buffering the text clipping path, if any.private floatclampColor(float color) voidclip(int windingRule) Modify the current clipping path by intersecting it with the current path.voidCloses the current path.private Glyph2DcreateGlyph2D(PDFont font) Provide a Glyph2D for the given font.voidcurveTo(float x1, float y1, float x2, float y2, float x3, float y3) Draws a curve from the current point to (x3,y3) using (x1,y1) and (x2,y2) as control points.private voiddrawBufferedImage(BufferedImage image, AffineTransform at) private voiddrawGlyph2D(Glyph2D glyph2D, PDFont font, int code, Vector displacement, AffineTransform at) Render the font using the Glyph2D interface.voidDraw the image.voiddrawPage(Graphics g, PDRectangle pageSize) Draws the page to the requested context.(package private) voiddrawTilingPattern(Graphics2D g, PDTilingPattern pattern, PDColorSpace colorSpace, PDColor color, Matrix patternMatrix) Draws the pattern stream to the requested context.voidCalled when a marked content group endsvoidendPath()Ends the current path without filling or stroking it.voidendText()Called when the ET operator is encountered.private voidEnd buffering the text clipping path, if any.voidfillAndStrokePath(int windingRule) Fills and then strokes the path.voidfillPath(int windingRule) Fill the path.Return the AnnotationFilter.Returns the current point of the current path.private float[]getDashArray(PDLineDashPattern dashPattern) protected final Graphics2DReturns the underlying Graphics2D.private LookupTableprotected final GeneralPathReturns the current line path.protected final PaintReturns the non-stroking AWT Paint.protected PaintReturns an AWT paint for the given PDColor.final PDFRendererReturns the parent renderer.private Strokeprivate Paintprotected intgetSubsampling(PDImage pdImage, AffineTransform at) Calculates the subsampling frequency for a given PDImage based on the current transformation and its calculated transform.private booleanhasBlendMode(PDTransparencyGroup group, Set<COSBase> groupsDone) private voidintersectShadingBBox(PDColor color, Area area) private booleanisAllZeroDash(float[] dashArray) private booleanprivate booleanisHiddenOCG(PDPropertyList propertyList) private booleanprivate booleanisRectangular(GeneralPath path) Returns true if the given path is rectangular.voidlineTo(float x, float y) Draws a line from the current point to (x,y).voidmoveTo(float x, float y) Starts a new path at (x,y).voidsetAnnotationFilter(AnnotationFilter annotationFilter) Set the AnnotationFilter.protected final voidsetClip()Sets the clipping path using caching for performance.private voidSets high-quality rendering hints on the current Graphics2D.voidshadingFill(COSName shadingName) Fill with Shading.voidshowAnnotation(PDAnnotation annotation) Shows the given annotation.protected voidshowFontGlyph(Matrix textRenderingMatrix, PDFont font, int code, Vector displacement) Called when a glyph is to be processed.voidshowForm(PDFormXObject form) Shows a form from the content stream.voidShows a transparency group from the content stream.protected voidshowTransparencyGroupOnGraphics(PDTransparencyGroup form, Graphics2D graphics) For advanced users, to extract the transparency group into a separate graphics device.protected voidshowType3Glyph(Matrix textRenderingMatrix, PDType3Font font, int code, Vector displacement) Called when a glyph is to be processed.voidStroke the path.protected voidtransferClip(Graphics2D graphics) Transfer clip to the destination device.Methods inherited from class org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine
getPageMethods inherited from class org.apache.pdfbox.contentstream.PDFStreamEngine
addOperator, applyTextAdjustment, decreaseLevel, getAppearance, getCurrentPage, getGraphicsStackSize, getGraphicsState, getInitialMatrix, getLevel, getResources, getTextLineMatrix, getTextMatrix, increaseLevel, operatorException, processAnnotation, processChildStream, processOperator, processOperator, processPage, processSoftMask, processTilingPattern, processTilingPattern, processTransparencyGroup, processType3Stream, registerOperatorProcessor, restoreGraphicsStack, restoreGraphicsState, saveGraphicsStack, saveGraphicsState, setLineDashPattern, setTextLineMatrix, setTextMatrix, showFontGlyph, showGlyph, showGlyph, showText, showTextString, showTextStrings, showType3Glyph, transformedPoint, transformWidth, unsupportedOperator
-
Field Details
-
LOG
private static final org.apache.commons.logging.Log LOG -
OS_NAME
-
IS_WINDOWS
private static final boolean IS_WINDOWS -
IS_LINUX
private static final boolean IS_LINUX -
renderer
-
subsamplingAllowed
private final boolean subsamplingAllowed -
graphics
-
xform
-
xformScalingFactorX
private float xformScalingFactorX -
xformScalingFactorY
private float xformScalingFactorY -
pageSize
-
flipTG
private boolean flipTG -
clipWindingRule
private int clipWindingRule -
linePath
-
lastClips
-
initialClip
-
textClippings
-
fontGlyph2D
-
tilingPaintFactory
-
transparencyGroupStack
-
nestedHiddenOCGCount
private int nestedHiddenOCGCount -
destination
-
renderingHints
-
imageDownscalingOptimizationThreshold
private final float imageDownscalingOptimizationThreshold -
invTable
-
annotationFilter
Default annotations filter, returns all annotations
-
-
Constructor Details
-
PageDrawer
Constructor.- Parameters:
parameters- Parameters for page drawing.- Throws:
IOException- If there is an error loading properties from the file.
-
-
Method Details
-
getAnnotationFilter
Return the AnnotationFilter.- Returns:
- the AnnotationFilter
-
setAnnotationFilter
Set the AnnotationFilter.Allows to only render annotation accepted by the filter.
- Parameters:
annotationFilter- the AnnotationFilter
-
getRenderer
Returns the parent renderer. -
getGraphics
Returns the underlying Graphics2D. May be null if drawPage has not yet been called. -
getLinePath
Returns the current line path. This is reset to empty after each fill/stroke. -
setRenderingHints
private void setRenderingHints()Sets high-quality rendering hints on the current Graphics2D. -
drawPage
Draws the page to the requested context.- Parameters:
g- The graphics context to draw onto.pageSize- The size of the page to draw.- Throws:
IOException- If there is an IO error while drawing the page.
-
drawTilingPattern
void drawTilingPattern(Graphics2D g, PDTilingPattern pattern, PDColorSpace colorSpace, PDColor color, Matrix patternMatrix) throws IOException Draws the pattern stream to the requested context.- Parameters:
g- The graphics context to draw onto.pattern- The tiling pattern to be used.colorSpace- color space for this tiling.color- color for this tiling.patternMatrix- the pattern matrix- Throws:
IOException- If there is an IO error while drawing the page.
-
clampColor
private float clampColor(float color) -
getPaint
Returns an AWT paint for the given PDColor.- Parameters:
color- The color to get a paint for. This can be an actual color or a pattern.- Throws:
IOException
-
setClip
protected final void setClip()Sets the clipping path using caching for performance. We track lastClip manually becauseGraphics.getClip()returns a new object instead of the same one passed tosetClip(). You may need to call this if you overrideshowGlyph(). See PDFBOX-5093 for more. -
transferClip
Transfer clip to the destination device. Override this if you want to avoid to do slow intersecting operations but want the destination device to do this (e.g. SVG). You can get the individual clippings viaPDGraphicsState.getCurrentClippingPaths(). See PDFBOX-5258 for sample code.- Parameters:
graphics- graphics device
-
beginText
Description copied from class:PDFStreamEngineCalled when the BT operator is encountered. This method is for overriding in subclasses, the default implementation does nothing.- Overrides:
beginTextin classPDFStreamEngine- Throws:
IOException- if there was an error processing the text
-
endText
Description copied from class:PDFStreamEngineCalled when the ET operator is encountered. This method is for overriding in subclasses, the default implementation does nothing.- Overrides:
endTextin classPDFStreamEngine- Throws:
IOException- if there was an error processing the text
-
beginTextClip
private void beginTextClip()Begin buffering the text clipping path, if any. -
endTextClip
private void endTextClip()End buffering the text clipping path, if any. -
showFontGlyph
protected void showFontGlyph(Matrix textRenderingMatrix, PDFont font, int code, Vector displacement) throws IOException Description copied from class:PDFStreamEngineCalled when a glyph is to be processed. This method is intended for overriding in subclasses, the default implementation does nothing.- Overrides:
showFontGlyphin classPDFStreamEngine- Parameters:
textRenderingMatrix- the current text rendering matrix, Trmfont- the current fontcode- internal PDF character code for the glyphdisplacement- the displacement (i.e. advance) of the glyph in text space- Throws:
IOException- if the glyph cannot be processed
-
drawGlyph2D
private void drawGlyph2D(Glyph2D glyph2D, PDFont font, int code, Vector displacement, AffineTransform at) throws IOException Render the font using the Glyph2D interface.- Parameters:
glyph2D- the Glyph2D implementation provided a GeneralPath for each glyphfont- the fontcode- character codedisplacement- the glyph's displacement (advance)at- the transformation- Throws:
IOException- if something went wrong
-
showType3Glyph
protected void showType3Glyph(Matrix textRenderingMatrix, PDType3Font font, int code, Vector displacement) throws IOException Description copied from class:PDFStreamEngineCalled when a glyph is to be processed. This method is intended for overriding in subclasses, the default implementation does nothing.- Overrides:
showType3Glyphin classPDFStreamEngine- Parameters:
textRenderingMatrix- the current text rendering matrix, Trmfont- the current fontcode- internal PDF character code for the glyphdisplacement- the displacement (i.e. advance) of the glyph in text space- Throws:
IOException- if the glyph cannot be processed
-
createGlyph2D
Provide a Glyph2D for the given font.- Parameters:
font- the font- Returns:
- the implementation of the Glyph2D interface for the given font
- Throws:
IOException- if something went wrong
-
appendRectangle
Description copied from class:PDFGraphicsStreamEngineAppend a rectangle to the current path.- Specified by:
appendRectanglein classPDFGraphicsStreamEngine- Parameters:
p0- point P0 of the rectangle.p1- point P1 of the rectangle.p2- point P2 of the rectangle.p3- point P3 of the rectangle.
-
applySoftMaskToPaint
- Throws:
IOException
-
adjustImage
-
getStrokingPaint
- Throws:
IOException
-
getNonStrokingPaint
Returns the non-stroking AWT Paint. You may need to call this if you overrideshowGlyph(). See PDFBOX-5093 for more.- Returns:
- The non-stroking AWT Paint.
- Throws:
IOException
-
getStroke
-
isAllZeroDash
private boolean isAllZeroDash(float[] dashArray) -
getDashArray
-
strokePath
Description copied from class:PDFGraphicsStreamEngineStroke the path.- Specified by:
strokePathin classPDFGraphicsStreamEngine- Throws:
IOException- If there is an IO error while stroking the path.
-
fillPath
Description copied from class:PDFGraphicsStreamEngineFill the path.- Specified by:
fillPathin classPDFGraphicsStreamEngine- Parameters:
windingRule- The winding rule this path will use.- Throws:
IOException- if something went wrong.
-
intersectShadingBBox
- Throws:
IOException
-
isRectangular
Returns true if the given path is rectangular. -
fillAndStrokePath
Fills and then strokes the path.- Specified by:
fillAndStrokePathin classPDFGraphicsStreamEngine- Parameters:
windingRule- The winding rule this path will use.- Throws:
IOException- If there is an IO error while filling the path.
-
clip
public void clip(int windingRule) Description copied from class:PDFGraphicsStreamEngineModify the current clipping path by intersecting it with the current path. The clipping path will not be updated until the succeeding painting operator is called.- Specified by:
clipin classPDFGraphicsStreamEngine- Parameters:
windingRule- The winding rule which will be used for clipping.
-
moveTo
public void moveTo(float x, float y) Description copied from class:PDFGraphicsStreamEngineStarts a new path at (x,y).- Specified by:
moveToin classPDFGraphicsStreamEngine- Parameters:
x- x-coordinate of the target point.y- y-coordinate of the target point.
-
lineTo
public void lineTo(float x, float y) Description copied from class:PDFGraphicsStreamEngineDraws a line from the current point to (x,y).- Specified by:
lineToin classPDFGraphicsStreamEngine- Parameters:
x- x-coordinate of the end point of the line.y- y-coordinate of the end point of the line.
-
curveTo
public void curveTo(float x1, float y1, float x2, float y2, float x3, float y3) Description copied from class:PDFGraphicsStreamEngineDraws a curve from the current point to (x3,y3) using (x1,y1) and (x2,y2) as control points.- Specified by:
curveToin classPDFGraphicsStreamEngine- Parameters:
x1- x-coordinate of the first control point.y1- y-coordinate of the first control point.x2- x-coordinate of the second control point.y2- y-coordinate of the second control point.x3- x-coordinate of the end point of the curve.y3- y-coordinate of the end point of the curve.
-
getCurrentPoint
Description copied from class:PDFGraphicsStreamEngineReturns the current point of the current path.- Specified by:
getCurrentPointin classPDFGraphicsStreamEngine- Returns:
- the current point.
-
closePath
public void closePath()Description copied from class:PDFGraphicsStreamEngineCloses the current path.- Specified by:
closePathin classPDFGraphicsStreamEngine
-
endPath
public void endPath()Description copied from class:PDFGraphicsStreamEngineEnds the current path without filling or stroking it. The clipping path is updated here.- Specified by:
endPathin classPDFGraphicsStreamEngine
-
drawImage
Description copied from class:PDFGraphicsStreamEngineDraw the image.- Specified by:
drawImagein classPDFGraphicsStreamEngine- Parameters:
pdImage- The image to draw.- Throws:
IOException- if something went wrong.
-
getSubsampling
Calculates the subsampling frequency for a given PDImage based on the current transformation and its calculated transform. Extend this method if you want to use your own strategy.- Parameters:
pdImage- PDImage to be drawnat- Transform that will be applied to the image when drawing- Returns:
- The rounded-down ratio of image pixels to drawn pixels. Returned value will always be >=1.
-
drawBufferedImage
- Throws:
IOException
-
applyTransferFunction
private BufferedImage applyTransferFunction(BufferedImage image, COSBase transfer) throws IOException - Throws:
IOException
-
shadingFill
Description copied from class:PDFGraphicsStreamEngineFill with Shading.- Specified by:
shadingFillin classPDFGraphicsStreamEngine- Parameters:
shadingName- The name of the Shading Dictionary to use for this fill instruction.- Throws:
IOException- if something went wrong.
-
showAnnotation
Description copied from class:PDFStreamEngineShows the given annotation.- Overrides:
showAnnotationin classPDFStreamEngine- Parameters:
annotation- An annotation on the current page.- Throws:
IOException- If an error occurred reading the annotation
-
showForm
Shows a form from the content stream.- Overrides:
showFormin classPDFStreamEngine- Parameters:
form- form XObject- Throws:
IOException- if the form cannot be processed
-
showTransparencyGroup
Description copied from class:PDFStreamEngineShows a transparency group from the content stream.- Overrides:
showTransparencyGroupin classPDFStreamEngine- Parameters:
form- transparency group (form) XObject- Throws:
IOException- if the transparency group cannot be processed
-
showTransparencyGroupOnGraphics
protected void showTransparencyGroupOnGraphics(PDTransparencyGroup form, Graphics2D graphics) throws IOException For advanced users, to extract the transparency group into a separate graphics device.- Parameters:
form-graphics-- Throws:
IOException
-
hasBlendMode
-
beginMarkedContentSequence
Called when a marked content group begins- Overrides:
beginMarkedContentSequencein classPDFStreamEngine- Parameters:
tag- indicates the role or significance of the sequenceproperties- optional properties
-
endMarkedContentSequence
public void endMarkedContentSequence()Called when a marked content group ends- Overrides:
endMarkedContentSequencein classPDFStreamEngine
-
isContentRendered
private boolean isContentRendered() -
isHiddenOCG
-
isHiddenOCMD
-
getInvLookupTable
-