Class PdfBoxGraphics2D
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classprivate static classprivate class -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate Colorprivate final AffineTransform(package private) final org.apache.pdfbox.pdmodel.common.PDRectangleprivate final Graphics2Dprivate BufferedImageprivate Shapeprivate IPdfBoxGraphics2DColorMapper(package private) final IPdfBoxGraphics2DColorMapper.IColorMapperEnvprivate Compositeprivate final org.apache.pdfbox.pdmodel.PDPageContentStreamprivate final PdfBoxGraphics2D.CopyInfoprivate final List<PdfBoxGraphics2D.CopyInfo> private org.apache.pdfbox.pdmodel.PDDocumentprivate IPdfBoxGraphics2DDrawControlprivate final IPdfBoxGraphics2DDrawControl.IDrawControlEnvstatic booleanGlobal Flag: If set to true the Callstack when creating a context is recorded.private static final booleanInternal Debug flag.private static final booleanInteral debugflag to see if an unkown stroke is mappedprivate Fontprivate final IPdfBoxGraphics2DFontTextDrawer.IFontTextDrawerEnvprivate IPdfBoxGraphics2DFontTextDrawerprivate booleanDo we currently have an active path on the content stream, which has not been closed?private IPdfBoxGraphics2DImageEncoder(package private) final IPdfBoxGraphics2DImageEncoder.IPdfBoxGraphics2DImageEncoderEnvprivate Paintprivate IPdfBoxGraphics2DPaintApplierprivate final PdfBoxGraphics2D.PaintApplyResultprivate final PdfBoxGraphics2D.PaintEnvImplprivate final Map<RenderingHints.Key, Object> private intprivate Strokeprivate AffineTransformprivate final org.apache.pdfbox.pdmodel.graphics.form.PDFormXObjectprivate Color -
Constructor Summary
ConstructorsModifierConstructorDescriptionprivatePdfBoxGraphics2D(org.apache.pdfbox.pdmodel.PDDocument document, float pixelWidth, float pixelHeight) Create a PDfBox Graphics2D.PdfBoxGraphics2D(org.apache.pdfbox.pdmodel.PDDocument document, int pixelWidth, int pixelHeight) Create a PDfBox Graphics2D.PdfBoxGraphics2D(org.apache.pdfbox.pdmodel.PDDocument document, org.apache.pdfbox.pdmodel.common.PDRectangle bbox) (package private)PdfBoxGraphics2D(org.apache.pdfbox.pdmodel.PDDocument document, org.apache.pdfbox.pdmodel.common.PDRectangle bbox, PdfBoxGraphics2D parentGfx) -
Method Summary
Modifier and TypeMethodDescriptionvoidaddRenderingHints(Map<?, ?> hints) applyPaint(Paint paintToApply, Shape shapeToDraw) applyPaint(Shape shapeToDraw) private voidapplyShadingAsColor(org.apache.pdfbox.pdmodel.graphics.shading.PDShading shading) private voidapplyStroke(Stroke strokeToApply) Internal usage only!private floatcalculateTransformedLength(float length, AffineTransform tf) private voidvoidclearRect(int x, int y, int width, int height) voidvoidclipRect(int x, int y, int width, int height) private voidprivate voidvoidcopyArea(int x, int y, int width, int height, int dx, int dy) create()Creates a copy of this graphics object.create(int x, int y, int width, int height) voiddispose()private static voidvoidvoidvoiddrawArc(int x, int y, int width, int height, int startAngle, int arcAngle) voiddrawGlyphVector(GlyphVector g, float x, float y) voiddrawImage(BufferedImage img, BufferedImageOp op, int x, int y) booleandrawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer) booleandrawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) booleandrawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) booleandrawImage(Image img, int x, int y, int width, int height, ImageObserver observer) booleandrawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) booleandrawImage(Image img, int x, int y, ImageObserver observer) booleandrawImage(Image img, AffineTransform xform, ImageObserver obs) voiddrawInMarkedContentSequence(org.apache.pdfbox.cos.COSName tagName, IPdfBoxGraphics2DMarkedContentDrawer drawer) Draw on the Graphics2D and enclose the drawing command with a BMC/EMC content marking pair.voiddrawInMarkedContentSequence(org.apache.pdfbox.cos.COSName tagName, org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList properties, IPdfBoxGraphics2DMarkedContentDrawer drawer) Draw on the Graphics2D and enclose the drawing command with a BDC/EMC content marking pair.voiddrawLine(int x1, int y1, int x2, int y2) voiddrawOval(int x, int y, int width, int height) voiddrawPolygon(int[] xPoints, int[] yPoints, int nPoints) voiddrawPolyline(int[] xPoints, int[] yPoints, int nPoints) voiddrawRect(int x, int y, int width, int height) voiddrawRenderableImage(RenderableImage img, AffineTransform xform) voiddrawRenderedImage(RenderedImage img, AffineTransform xform) voiddrawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) voiddrawString(String str, float x, float y) voiddrawString(String str, int x, int y) voiddrawString(AttributedCharacterIterator iterator, float x, float y) voiddrawString(AttributedCharacterIterator iterator, int x, int y) private voiddrawStringUsingShapes(AttributedCharacterIterator iterator, float x, float y) private voiddrawStringUsingText(AttributedCharacterIterator iterator, float x, float y) private voidfill(boolean useEvenOdd) voidvoidfillArc(int x, int y, int width, int height, int startAngle, int arcAngle) voidfillOval(int x, int y, int width, int height) voidfillPolygon(int[] xPoints, int[] yPoints, int nPoints) voidfillRect(int x, int y, int width, int height) voidfillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) private Stringprivate static StringgetClip()getColor()private AffineTransformgetFont()getPaint()getRenderingHint(RenderingHints.Key hintKey) org.apache.pdfbox.pdmodel.PDResourcesSometimes you need to access the PDResources and add special resources to it for some stuff (e.g.org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject*AFTER* you have disposed() this Graphics2D you can access the XFormboolean(package private) voidinternalClip(boolean useEvenOdd) Perform a clip, but only if we really have an active clipping pathprivate static booleanisFinite(float f) Float#isFinite() is JDK 8+.private static booleanisFinite(float[] coords, int count) (package private) voidSet an internal flag that some path - which may be added from the paint applyer to the content stream or by walkShape() - is on the content stream.voidrotate(double theta) voidrotate(double theta, double x, double y) voidscale(double sx, double sy) voidsetBackground(Color color) voidsetClip(int x, int y, int width, int height) voidvoidvoidsetColorMapper(IPdfBoxGraphics2DColorMapper colorMapper) Set a new color mapper.voidsetComposite(Composite comp) voidsetDrawControl(IPdfBoxGraphics2DDrawControl drawControl) Set a new draw control.voidvoidsetFontTextDrawer(IPdfBoxGraphics2DFontTextDrawer fontTextDrawer) Set an optional text drawer.voidsetImageEncoder(IPdfBoxGraphics2DImageEncoder imageEncoder) Set a new image encodervoidvoidsetPaintApplier(IPdfBoxGraphics2DPaintApplier paintApplier) Set a new paint applier.voidvoidsetRenderingHint(RenderingHints.Key hintKey, Object hintValue) voidsetRenderingHints(Map<?, ?> hints) voidvoidvoidsetXORMode(Color c1) XOR Mode is currently not implemented as it's not possible in PDF.voidshear(double shx, double shy) (package private) static <T> TInternal helper functionvoidvoidtranslate(double tx, double ty) voidtranslate(int x, int y) private voidwalkAndFillFromApplyPaintResult(Shape shapeToFill, PdfBoxGraphics2D.PaintApplyResult result) private voidwalkAndFillShape(Shape shapeToFill) private booleanWalk the path and return true if we need to use the even odd winding rule.Methods inherited from class Graphics2D
draw3DRect, fill3DRectMethods inherited from class Graphics
drawBytes, drawChars, drawPolygon, fillPolygon, finalize, getClipBounds, getClipRect, getFontMetrics, hitClip, toString
-
Field Details
-
xFormObject
private final org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject xFormObject -
calcGfx
-
contentStream
private final org.apache.pdfbox.pdmodel.PDPageContentStream contentStream -
calcImage
-
document
private org.apache.pdfbox.pdmodel.PDDocument document -
baseTransform
-
transform
-
imageEncoder
-
colorMapper
-
paintApplier
-
fontTextDrawer
-
drawControl
-
paint
-
stroke
-
xorColor
-
font
-
composite
-
clipShape
-
backgroundColor
-
copyInfo
-
bbox
final org.apache.pdfbox.pdmodel.common.PDRectangle bbox -
saveCounter
private int saveCounter -
copyList
-
ENABLE_CHILD_CREATING_DEBUG
public static boolean ENABLE_CHILD_CREATING_DEBUGGlobal Flag: If set to true the Callstack when creating a context is recorded.Note: Setting this to true will slow down the library. Use this only for debugging.
-
drawControlEnv
-
ENABLE_DEBUG_UNKOWN_STROKE
private static final boolean ENABLE_DEBUG_UNKOWN_STROKEInteral debugflag to see if an unkown stroke is mapped- See Also:
-
imageEncoderEnv
-
fontDrawerEnv
-
paintEnv
-
colorMapperEnv
-
paintApplyResult
-
renderingHints
-
ENABLE_DEBUG_INTERNAL_CLIP
private static final boolean ENABLE_DEBUG_INTERNAL_CLIPInternal Debug flag.- See Also:
-
hasPathOnStream
private boolean hasPathOnStreamDo we currently have an active path on the content stream, which has not been closed?We need this flag to avoid to clip twice if both the plaint applyer needs to clip, and we have some clipping. If at the end we try to clip with an empty path, then Acrobat Reader does not like that and draws nothing.
-
-
Constructor Details
-
PdfBoxGraphics2D
public PdfBoxGraphics2D(org.apache.pdfbox.pdmodel.PDDocument document, int pixelWidth, int pixelHeight) throws IOException Create a PDfBox Graphics2D. This size is used for the BBox of the XForm. So everything drawn outside the rectangle (0x0)-(pixelWidth,pixelHeight) will be clipped.Note: pixelWidth and pixelHeight only define the size of the coordinate space within this Graphics2D. They do not affect how big the XForm is finally displayed in the PDF.
- Parameters:
document- The document the graphics should be used to create a XForm in.pixelWidth- the width in pixel of the drawing area.pixelHeight- the height in pixel of the drawing area.- Throws:
IOException- if something goes wrong with writing into the content stream of thePDDocument.
-
PdfBoxGraphics2D
public PdfBoxGraphics2D(org.apache.pdfbox.pdmodel.PDDocument document, float pixelWidth, float pixelHeight) throws IOException Create a PDfBox Graphics2D. This size is used for the BBox of the XForm. So everything drawn outside the rectangle (0x0)-(pixelWidth,pixelHeight) will be clipped.Note: pixelWidth and pixelHeight only define the size of the coordinate space within this Graphics2D. They do not affect how big the XForm is finally displayed in the PDF.
- Parameters:
document- The document the graphics should be used to create a XForm in.pixelWidth- the width in pixel of the drawing area.pixelHeight- the height in pixel of the drawing area.- Throws:
IOException- if something goes wrong with writing into the content stream of thePDDocument.
-
PdfBoxGraphics2D
public PdfBoxGraphics2D(org.apache.pdfbox.pdmodel.PDDocument document, org.apache.pdfbox.pdmodel.common.PDRectangle bbox) throws IOException - Parameters:
document- The document the graphics should be used to create a XForm in.bbox- Bounding Box of the graphics- Throws:
IOException- when something goes wrong with writing into the content stream of thePDDocument.
-
PdfBoxGraphics2D
PdfBoxGraphics2D(org.apache.pdfbox.pdmodel.PDDocument document, org.apache.pdfbox.pdmodel.common.PDRectangle bbox, PdfBoxGraphics2D parentGfx) throws IOException - Throws:
IOException
-
PdfBoxGraphics2D
- Throws:
IOException
-
-
Method Details
-
setColorMapper
Set a new color mapper.- Parameters:
colorMapper- the color mapper which maps Color to PDColor.
-
setImageEncoder
Set a new image encoder- Parameters:
imageEncoder- the image encoder, which encodes an image as PDImageXForm.
-
setPaintApplier
Set a new paint applier. You should always derive your custom paint applier from theIPdfBoxGraphics2DPaintApplierand just extend the paint mapping for custom paint.If the paint you map is a paint from a standard library, and you can implement the mapping using reflection please feel free to send a pull request to extend the default paint mapper.
- Parameters:
paintApplier- the paint applier responsible for mapping the paint correctly
-
setDrawControl
Set a new draw control. This allows you to influence fill() and draw() operations. drawString() is only influence if the text is drawn as vector shape.- Parameters:
drawControl- the draw control
-
setFontTextDrawer
Set an optional text drawer. By default, all text is vectorized and drawn using vector shapes. To embed fonts into a PDF file it is necessary to have the underlying TTF file. The java.awt.Font class does not provide that. The FontTextDrawer must perform the java.awt.Font <=> PDFont mapping and also must perform the text layout. If it can not map the text or font correctly, the font drawing falls back to vectoring the text.- Parameters:
fontTextDrawer- The text drawer, which can draw text using fonts
-
getResources
public org.apache.pdfbox.pdmodel.PDResources getResources()Sometimes you need to access the PDResources and add special resources to it for some stuff (e.g. patterns of embedded PDFs or simmilar). For that you need the PDResources associated with the XForm.It's identlical with getXFormObject().getResources(), with the difference beeing that you can access it while the Graphics2D is not yet disposed.
- Returns:
- the PDResources of the resulting XForm
-
getXFormObject
public org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject getXFormObject()*AFTER* you have disposed() this Graphics2D you can access the XForm- Returns:
- the PDFormXObject which resulted in this graphics
-
gatherContext
-
disposeDanglingChildGraphics
public void disposeDanglingChildGraphics()Sometimes the users ofcreate()don't correctlydispose()the child graphics they create. And you may not always be able to fix this uses, as it may be in some 3rdparty library. In this case this method can help you. It will cleanup all dangling child graphics. The child graphics can not be used after that. This method is a workaround for a buggy old code. You should only use it if you have to.
Note: You can only call this method on the "main" graphics, not on a child created with
create() -
disposeCopies
-
dispose
-
draw
- Specified by:
drawin classGraphics2D
-
applyStroke
Internal usage only!- Parameters:
strokeToApply- the stroke we should apply on the stream- Throws:
IOException
-
calculateTransformedLength
-
getCurrentEffectiveTransform
-
drawImage
- Specified by:
drawImagein classGraphics2D
-
drawRenderedImage
- Specified by:
drawRenderedImagein classGraphics2D
-
drawRenderableImage
- Specified by:
drawRenderableImagein classGraphics2D
-
drawString
- Specified by:
drawStringin classGraphics2D
-
drawString
- Specified by:
drawStringin classGraphics2D
-
drawString
- Specified by:
drawStringin classGraphics2D
-
drawImage
-
drawImage
-
drawImage
-
drawImage
public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) -
drawImage
public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) -
drawImage
- Specified by:
drawImagein classGraphics2D
-
drawImage
public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer) -
drawStringUsingShapes
-
drawString
- Specified by:
drawStringin classGraphics2D
-
drawStringUsingText
private void drawStringUsingText(AttributedCharacterIterator iterator, float x, float y) throws IOException, FontFormatException - Throws:
IOExceptionFontFormatException
-
contentStreamSaveState
- Throws:
IOException
-
contentStreamRestoreState
- Throws:
IOException
-
drawGlyphVector
- Specified by:
drawGlyphVectorin classGraphics2D
-
fill
- Specified by:
fillin classGraphics2D
-
walkAndFillFromApplyPaintResult
private void walkAndFillFromApplyPaintResult(Shape shapeToFill, PdfBoxGraphics2D.PaintApplyResult result) throws IOException - Throws:
IOException
-
walkAndFillShape
- Throws:
IOException
-
fill
- Throws:
IOException
-
applyShadingAsColor
private void applyShadingAsColor(org.apache.pdfbox.pdmodel.graphics.shading.PDShading shading) throws IOException - Throws:
IOException
-
applyPaint
- Throws:
IOException
-
applyPaint
private PdfBoxGraphics2D.PaintApplyResult applyPaint(Paint paintToApply, Shape shapeToDraw) throws IOException - Throws:
IOException
-
hit
- Specified by:
hitin classGraphics2D
-
getDeviceConfiguration
- Specified by:
getDeviceConfigurationin classGraphics2D
-
setComposite
- Specified by:
setCompositein classGraphics2D
-
setPaint
- Specified by:
setPaintin classGraphics2D
-
setStroke
- Specified by:
setStrokein classGraphics2D
-
setRenderingHint
- Specified by:
setRenderingHintin classGraphics2D
-
getRenderingHint
- Specified by:
getRenderingHintin classGraphics2D
-
setRenderingHints
- Specified by:
setRenderingHintsin classGraphics2D
-
addRenderingHints
- Specified by:
addRenderingHintsin classGraphics2D
-
getRenderingHints
- Specified by:
getRenderingHintsin classGraphics2D
-
create
Creates a copy of this graphics object. Please calldispose()always on the copy after you have finished drawing with it.
Never draw both in this copy and its parent graphics at the same time, as they all write to the same content stream. This will create a broken PDF content stream. You should get anIllegalStateExceptionif you do so, but better just don't try.
The copy allows you to have different transforms, paints, etc. than the parent graphics context without affecting the parent. You may also call create() on a copy, but always remember to calldispose()in reverse order. -
drawInMarkedContentSequence
public void drawInMarkedContentSequence(org.apache.pdfbox.cos.COSName tagName, IPdfBoxGraphics2DMarkedContentDrawer drawer) Draw on the Graphics2D and enclose the drawing command with a BMC/EMC content marking pair. See the PDF Spec about "Marked Content" for details.- Parameters:
tagName- A COSName for to tag the marked contentdrawer- is called with a (child) graphics to draw on. Please do *not* dispose() this graphics. Just draw on it. Any state changes on the given graphics will be reset after the drawing is finished
-
drawInMarkedContentSequence
public void drawInMarkedContentSequence(org.apache.pdfbox.cos.COSName tagName, org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList properties, IPdfBoxGraphics2DMarkedContentDrawer drawer) Draw on the Graphics2D and enclose the drawing command with a BDC/EMC content marking pair. See the PDF Spec about "Marked Content" for details.- Parameters:
tagName- A COSName for to tag the marked contentproperties- The properties to put by the marked sequencedrawer- is called with a (child) graphics to draw on. Please do *not* dispose() this graphics. Just draw on it. Any state changes on the given graphics will be reset after the drawing is finished
-
create
-
translate
public void translate(int x, int y) - Specified by:
translatein classGraphics2D
-
getColor
-
setColor
-
setPaintMode
public void setPaintMode()- Specified by:
setPaintModein classGraphics
-
setXORMode
XOR Mode is currently not implemented as it's not possible in PDF. This mode is ignored.- Specified by:
setXORModein classGraphics- Parameters:
c1- the XORMode Color
-
getFont
-
setFont
-
getFontMetrics
- Specified by:
getFontMetricsin classGraphics
-
getClipBounds
- Specified by:
getClipBoundsin classGraphics
-
clipRect
-
setClip
-
getClip
-
setClip
-
internalClip
Perform a clip, but only if we really have an active clipping path- Parameters:
useEvenOdd- true when we should use the evenOdd rule.- Throws:
IOException
-
isFinite
private static boolean isFinite(float f) Float#isFinite() is JDK 8+. We just copied the trivial implementation here. When we require JDK 8+ we can just drop this method and replace it bei Float#isFinite() -
isFinite
private static boolean isFinite(float[] coords, int count) - Returns:
- true when all required values are finite
-
markPathIsOnStream
void markPathIsOnStream()Set an internal flag that some path - which may be added from the paint applyer to the content stream or by walkShape() - is on the content stream. We can then safely clip() if there is a path on the content stream. -
walkShape
Walk the path and return true if we need to use the even odd winding rule.- Returns:
- true if we need to use the even odd winding rule
- Throws:
IOException
-
checkNoCopyActive
private void checkNoCopyActive() -
gatherDebugCopyInfo
-
throwException
Internal helper function- Parameters:
e- exception to rethrow
-
copyArea
-
drawLine
-
fillRect
-
drawRect
-
clearRect
-
drawRoundRect
public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) - Specified by:
drawRoundRectin classGraphics
-
fillRoundRect
public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) - Specified by:
fillRoundRectin classGraphics
-
drawOval
-
fillOval
-
drawArc
-
fillArc
-
drawPolyline
public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) - Specified by:
drawPolylinein classGraphics
-
drawPolygon
public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) - Specified by:
drawPolygonin classGraphics
-
fillPolygon
public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) - Specified by:
fillPolygonin classGraphics
-
translate
public void translate(double tx, double ty) - Specified by:
translatein classGraphics2D
-
rotate
public void rotate(double theta) - Specified by:
rotatein classGraphics2D
-
rotate
public void rotate(double theta, double x, double y) - Specified by:
rotatein classGraphics2D
-
scale
public void scale(double sx, double sy) - Specified by:
scalein classGraphics2D
-
shear
public void shear(double shx, double shy) - Specified by:
shearin classGraphics2D
-
transform
- Specified by:
transformin classGraphics2D
-
setTransform
- Specified by:
setTransformin classGraphics2D
-
getTransform
- Specified by:
getTransformin classGraphics2D
-
getPaint
- Specified by:
getPaintin classGraphics2D
-
getComposite
- Specified by:
getCompositein classGraphics2D
-
setBackground
- Specified by:
setBackgroundin classGraphics2D
-
getBackground
- Specified by:
getBackgroundin classGraphics2D
-
getStroke
- Specified by:
getStrokein classGraphics2D
-
clip
- Specified by:
clipin classGraphics2D
-
getFontRenderContext
- Specified by:
getFontRenderContextin classGraphics2D
-