A Graphics2D
implementation that creates SVG output. After
rendering the graphics via the SVGGraphics2D
, you can retrieve
an SVG element (see getSVGElement()
) or an SVG document (see
getSVGDocument()
) containing your content.
Using the SVGGraphics2D
class is straightforward. First,
create an instance specifying the height and width of the SVG element that
will be created. Then, use standard Java2D API calls to draw content
into the element. Finally, retrieve the SVG element that has been
accumulated. For example:
SVGGraphics2D g2 = new SVGGraphics2D(300, 200);
g2.setPaint(Color.RED);
g2.draw(new Rectangle(10, 10, 280, 180));
String svgElement = g2.getSVGElement();
For the content generation step, you can make use of third party libraries, such as JFreeChart and Orson Charts, that render output using standard Java2D API calls.
Rendering Hints
The SVGGraphics2D
supports a couple of custom rendering hints -
for details, refer to the SVGHints
class documentation. Also see
the examples in this blog post:
Orson Charts 3D / Enhanced SVG Export.
Some additional notes:
- by default, JFreeSVG uses a fast conversion of numerical values to
strings for the SVG output (the 'RyuDouble' implementation). If you
prefer a different approach (for example, controlling the number of
decimal places in the output to reduce the file size) you can set your
own functions for converting numerical values - see the
setGeomDoubleConverter(DoubleFunction)
andsetTransformDoubleConverter(DoubleFunction)
methods. - the
getFontMetrics(java.awt.Font)
andgetFontRenderContext()
methods return values that come from an internalBufferedImage
, this is a short-cut and we don't know if there are any negative consequences (if you know of any, please let us know and we'll add the info here or find a way to fix it); - Images are supported, but for methods with an
ImageObserver
parameter note that the observer is ignored completely. In any case, using images that are not fully loaded already would not be a good idea in the context of generating SVG data/files; - when an HTML page contains multiple SVG elements, the items within
the DEFS element for each SVG element must have IDs that are unique across
all SVG elements in the page. JFreeSVG auto-populates the
defsKeyPrefix
attribute to help ensure that unique IDs are generated.
For some demos showing how to use this class, look at the JFree-Demos project at GitHub: https://github.com/jfree/jfree-demos.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Arc2D
An instance that is reused in draw/fillArc to avoid creating a lot of garbage.private Color
The background color, used by clearRect().private boolean
A flag that controls whether or not the KEY_STROKE_CONTROL hint is checked.private Shape
The user clip (can be null).private static final String
The prefix for keys used to identify clip paths.A list of the registered clip regions.private String
The reference for the current clip.private Color
private Composite
private static final float
private static final String
private static final String
private String
A prefix for the keys used in the DEFS element.private GraphicsConfiguration
The device configuration (this is lazily instantiated in the getDeviceConfiguration() method).A set of element IDs.private String
The filename prefix for images that are referenced rather than embedded but don't have anhref
supplied via theSVGHints.KEY_IMAGE_HREF
hint.private String
The filename suffix for images that are referenced rather than embedded but don't have anhref
supplied via theSVGHints.KEY_IMAGE_HREF
hint.private BufferedImage
An internal image used for font metrics.private Graphics2D
The graphics target for the internal image that is used for font metrics.private Font
The last font that was set.Generates the SVG font from the Java font family name (this function provides a hook for custom output formatting (for example putting quotes around the font family name - see issue #27) and font substitutions.private final FontRenderContext
The font render context.private SVGUnits
The font size units.private DoubleFunction
<String> The function used to convert double values to strings for the geometry coordinates in the SVG output.private String
If the current paint is an instance ofGradientPaint
, this field will contain the reference id that is used in the DEFS element for that linear gradient.private Map
<GradientPaintKey, String> A map of all the gradients used, and the corresponding id.private final double
The height of the SVG.private final RenderingHints
Rendering hints (see SVGHints).private List
<ImageElement> A list of images that are referenced but not embedded in the SVG.private Line2D
An instance that is lazily instantiated in drawLine and then subsequently reused to avoid creating a lot of garbage.private Map
<LinearGradientPaintKey, String> A map of all the linear gradients used, and the corresponding id.private Ellipse2D
An instance that is lazily instantiated in draw/fillOval and then subsequently reused to avoid creating a lot of garbage.private Paint
The paint used to draw or fill shapes and text.private Map
<RadialGradientPaintKey, String> A map of all the radial gradients used, and the corresponding id.private Rectangle2D
An instance that is lazily instantiated in fillRect and then subsequently reused to avoid creating a lot of garbage.private RoundRectangle2D
An instance that is lazily instantiated in draw/fillRoundRect and then subsequently reused to avoid creating a lot of garbage.private final StringBuilder
The buffer that accumulates the SVG output.private Stroke
The current stroke.private AffineTransform
The current transform.private DoubleFunction
<String> The function used to convert double values to strings when writing matrix values for transforms in the SVG output.private final SVGUnits
Units for the width and height of the SVG, if null then no unit information is written in the SVG output.private final double
The width of the SVG.private double
The width of the SVG stroke to use when the user supplies a BasicStroke with a width of 0.0 (in this case the Java specification says "If width is set to 0.0f, the stroke is rendered as the thinnest possible line for the target device and the antialias hint setting.") -
Constructor Summary
ConstructorsModifierConstructorDescriptionSVGGraphics2D
(double width, double height) Creates a new instance with the specified width and height.SVGGraphics2D
(double width, double height, SVGUnits units) Creates a new instance with the specified width and height in the given units.SVGGraphics2D
(double width, double height, SVGUnits units, StringBuilder sb) Creates a new instance with the specified width and height that will populate the suppliedStringBuilder
instance.private
SVGGraphics2D
(SVGGraphics2D parent) Creates a new instance that is a child of the supplied parent. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addRenderingHints
(Map<?, ?> hints) Adds all the supplied rendering hints.private void
A utility method that appends an optional element id if one is specified via the rendering hints.void
clearRect
(int x, int y, int width, int height) Clears the specified rectangle by filling it with the current background color.void
Clips to the intersection of the current clipping region and the specified shape.void
clipRect
(int x, int y, int width, int height) Clips to the intersection of the current clipping region and the specified rectangle.void
copyArea
(int x, int y, int width, int height, int dx, int dy) This method does nothing.create()
Creates a new graphics object that is a copy of this graphics object (except that it has not accumulated the drawing operations).void
dispose()
This method does nothing, there are no resources to dispose.void
Draws the specified shape with the currentpaint
andstroke
.void
drawArc
(int x, int y, int width, int height, int startAngle, int arcAngle) Draws an arc contained within the rectangle(x, y, width, height)
, starting atstartAngle
and continuing througharcAngle
degrees using the currentpaint
andstroke
.void
drawGlyphVector
(GlyphVector g, float x, float y) Draws the specified glyph vector at the location(x, y)
.void
drawImage
(BufferedImage img, BufferedImageOp op, int x, int y) Draws the image resulting from applying theBufferedImageOp
to the specified image at the location(x, y)
.boolean
drawImage
(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer) Draws part of an image (defined by the source rectangle(sx1, sy1, sx2, sy2)
) into the destination rectangle(dx1, dy1, dx2, dy2)
.boolean
drawImage
(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) Draws part of an image (defined by the source rectangle(sx1, sy1, sx2, sy2)
) into the destination rectangle(dx1, dy1, dx2, dy2)
.boolean
drawImage
(Image img, int x, int y, int w, int h, Color bgcolor, ImageObserver observer) Draws an image to the rectangle(x, y, w, h)
(scaling it if required), first filling the background with the specified color.boolean
drawImage
(Image img, int x, int y, int w, int h, ImageObserver observer) Draws the image into the rectangle defined by(x, y, w, h)
.boolean
drawImage
(Image img, int x, int y, Color bgcolor, ImageObserver observer) Draws an image at the location(x, y)
.boolean
drawImage
(Image img, int x, int y, ImageObserver observer) Draws an image at the location(x, y)
.boolean
drawImage
(Image img, AffineTransform xform, ImageObserver obs) Draws an image with the specified transform.void
drawLine
(int x1, int y1, int x2, int y2) Draws a line from(x1, y1)
to(x2, y2)
using the currentpaint
andstroke
.void
drawOval
(int x, int y, int width, int height) Draws an oval framed by the rectangle(x, y, width, height)
using the currentpaint
andstroke
.void
drawPolygon
(int[] xPoints, int[] yPoints, int nPoints) Draws the specified polygon using the currentpaint
andstroke
.void
drawPolyline
(int[] xPoints, int[] yPoints, int nPoints) Draws the specified multi-segment line using the currentpaint
andstroke
.void
drawRenderableImage
(RenderableImage img, AffineTransform xform) Draws the renderable image.void
drawRenderedImage
(RenderedImage img, AffineTransform xform) Draws the rendered image.void
drawRoundRect
(int x, int y, int width, int height, int arcWidth, int arcHeight) Draws a rectangle with rounded corners using the currentpaint
andstroke
.void
drawString
(String str, float x, float y) Draws a string at(x, y)
.void
drawString
(String str, int x, int y) Draws a string at(x, y)
.void
drawString
(AttributedCharacterIterator iterator, float x, float y) Draws a string of attributed characters at(x, y)
.void
drawString
(AttributedCharacterIterator iterator, int x, int y) Draws a string of attributed characters at(x, y)
.void
Fills the specified shape with the currentpaint
.void
fillArc
(int x, int y, int width, int height, int startAngle, int arcAngle) Fills an arc contained within the rectangle(x, y, width, height)
, starting atstartAngle
and continuing througharcAngle
degrees, using the currentpaint
.void
fillOval
(int x, int y, int width, int height) Fills an oval framed by the rectangle(x, y, width, height)
.void
fillPolygon
(int[] xPoints, int[] yPoints, int nPoints) Fills the specified polygon using the currentpaint
.void
fillRect
(int x, int y, int width, int height) Fills the specified rectangle with the currentpaint
.void
fillRoundRect
(int x, int y, int width, int height, int arcWidth, int arcHeight) Fills a rectangle with rounded corners using the currentpaint
.private String
geomDP
(double d) Returns a string representation of the specified number for use in the SVG output.private float
getAlpha()
Returns the current alpha (transparency) in the range 0.0 to 1.0.Returns the background color.boolean
Returns the flag that controls whether or not this object will observe theKEY_STROKE_CONTROL
rendering hint.getClip()
Returns the user clipping region.Returns the bounds of the user clipping region.private String
Returns a clip path reference for the current user clip.getColor()
Returns the foreground color.private float
Returns the alpha value of the currentpaint
, or1.0f
if it is not an instance ofColor
.Returns the current composite.Returns the prefix used for all keys in the DEFS element.Returns the device configuration associated with thisGraphics2D
.Returns a new set containing the element IDs that have been used in output so far.Returns the prefix used to generate a filename for an image that is referenced from, rather than embedded in, the SVG element.Returns the suffix used to generate a filename for an image that is referenced from, rather than embedded in, the SVG element.getFont()
Returns the current font used for drawing text.Returns the function that generates SVG font references from a supplied Java font family name.Returns the font metrics for the specified font.Returns the font render context.Returns the font size units.Returns the double-to-string function that is used when writing coordinates for geometrical shapes in the SVG output.double
Returns the height for the SVG element, specified in the constructor.private String
getLinearGradientElement
(String id, GradientPaint paint) Returns an element to represent a linear gradient.private String
getLinearGradientElement
(String id, LinearGradientPaint paint) Returns an element to represent a linear gradient.getPaint()
Returns the paint used to draw or fill shapes (or text).private byte[]
getPNGBytes
(Image img) Returns the bytes representing a PNG format image.private String
Returns an element to represent a radial gradient.getRenderingHint
(RenderingHints.Key hintKey) Returns the current value for the specified hint.Returns a copy of the rendering hints.Returns the current stroke (used when drawing shapes).Returns an SVG document (this contains the content returned by thegetSVGElement()
method, prepended with the required document header).Returns the SVG element that has been generated by calls to thisGraphics2D
implementation.getSVGElement
(String id) Returns the SVG element that has been generated by calls to thisGraphics2D
implementation, giving it the specifiedid
.getSVGElement
(String id, boolean includeDimensions, ViewBox viewBox, PreserveAspectRatio preserveAspectRatio, MeetOrSlice meetOrSlice) Returns the SVG element that has been generated by calls to thisGraphics2D
implementation, giving it the specifiedid
.private String
Returns a fill style string based on the current paint and alpha settings.private String
Returns a string containing font style info.Returns the list of image elements that have been referenced in the SVG output but not embedded.private String
getSVGPathData
(Path2D path) Creates an SVG path string for the supplied Java2D path.private String
Returns a copy of the current transform.Returns the double-to-string function that is used when writing values for matrix transformations in the SVG output.getUnits()
Returns the units for the width and height of the SVG element's viewport, as specified in the constructor.double
getWidth()
Returns the width for the SVG element, specified in the constructor.double
Returns the width to use for the SVG stroke when the AWT stroke specified has a zero width (the default value is0.1
).boolean
Returnstrue
if the rectangle (in device space) intersects with the shape (the interior, ifonStroke
isfalse
, otherwise the stroked outline of the shape).private boolean
Returnstrue
if there are items that need to be written to the DEFS element, andfalse
otherwise.private String
registerClip
(Shape clip) Registers the clip so that we can later write out all the clip definitions in the DEFS element.private String
Returns a string representing the specified color in RGBA format.private String
rgbColorStr
(Color c) Returns the SVG RGB color string for the specified color.void
rotate
(double theta) Applies a rotation (anti-clockwise) about(0, 0)
.void
rotate
(double theta, double x, double y) Applies a rotation (anti-clockwise) about(x, y)
.void
scale
(double sx, double sy) Applies a scale transformation.void
setBackground
(Color color) Sets the background color.void
setCheckStrokeControlHint
(boolean check) Sets the flag that controls whether or not this object will observe theKEY_STROKE_CONTROL
rendering hint.void
setClip
(int x, int y, int width, int height) Sets the user clipping region to the specified rectangle.void
Sets the user clipping region.void
Sets the foreground color.void
setComposite
(Composite comp) Sets the composite (onlyAlphaComposite
is handled).void
setDefsKeyPrefix
(String prefix) Sets the prefix that will be used for all keys in the DEFS element.void
setFilePrefix
(String prefix) Sets the prefix used to generate a filename for any image that is referenced from the SVG element.void
setFileSuffix
(String suffix) Sets the suffix used to generate a filename for any image that is referenced from the SVG element.void
Sets the font to be used for drawing text.void
setFontFunction
(Function<String, String> fontFunction) Sets the font function that is used to generate SVG font references from Java font family names.void
setFontSizeUnits
(SVGUnits fontSizeUnits) Sets the font size units.void
setGeomDoubleConverter
(DoubleFunction<String> converter) Sets the double-to-string function that is used when writing coordinates for geometrical shapes in the SVG output.private void
setOval
(int x, int y, int width, int height) Sets the attributes of the reusableEllipse2D
object that is used by thedrawOval(int, int, int, int)
andfillOval(int, int, int, int)
methods.void
Sets the paint used to draw or fill shapes (or text).void
Does nothing in thisSVGGraphics2D
implementation.private void
setRect
(int x, int y, int width, int height) Sets the attributes of the reusableRectangle2D
object that is used by theGraphics.drawRect(int, int, int, int)
andfillRect(int, int, int, int)
methods.void
setRenderingHint
(RenderingHints.Key hintKey, Object hintValue) Sets the value for a hint.void
setRenderingHints
(Map<?, ?> hints) Sets the rendering hints to the specified collection.private void
setRoundRect
(int x, int y, int width, int height, int arcWidth, int arcHeight) Sets the attributes of the reusableRoundRectangle2D
object that is used by thedrawRoundRect(int, int, int, int, int, int)
andfillRoundRect(int, int, int, int, int, int)
methods.void
Sets the stroke that will be used to draw shapes.void
Sets the transform.void
setTransformDoubleConverter
(DoubleFunction<String> converter) Sets the double-to-string function that is used when writing coordinates for matrix transformations in the SVG output.void
setXORMode
(Color c) Does nothing in thisSVGGraphics2D
implementation.void
setZeroStrokeWidth
(double width) Sets the width to use for the SVG stroke when the current AWT stroke has a width of 0.0.void
shear
(double shx, double shy) Applies a shear transformation.private String
Returns a stroke style string based on the current stroke and alpha settings.private String
Returns an SVG color string based on the current paint.void
Applies this transform to the existing transform by concatenating it.private String
transformDP
(double d) Returns a string representation of the specified number for use in the SVG output.void
translate
(double tx, double ty) Applies the translation(tx, ty)
.void
translate
(int tx, int ty) Applies the translation(tx, ty)
.Methods inherited from class java.awt.Graphics2D
draw3DRect, fill3DRect
Methods inherited from class java.awt.Graphics
create, drawBytes, drawChars, drawPolygon, drawRect, fillPolygon, finalize, getClipBounds, getClipRect, getFontMetrics, hitClip, toString
-
Field Details
-
CLIP_KEY_PREFIX
The prefix for keys used to identify clip paths.- See Also:
-
width
private final double widthThe width of the SVG. -
height
private final double heightThe height of the SVG. -
units
Units for the width and height of the SVG, if null then no unit information is written in the SVG output. This is set via the class constructors. -
fontSizeUnits
The font size units. -
hints
Rendering hints (see SVGHints). -
checkStrokeControlHint
private boolean checkStrokeControlHintA flag that controls whether or not the KEY_STROKE_CONTROL hint is checked. -
transformDoubleConverter
The function used to convert double values to strings when writing matrix values for transforms in the SVG output. -
geomDoubleConverter
The function used to convert double values to strings for the geometry coordinates in the SVG output. -
sb
The buffer that accumulates the SVG output. -
defsKeyPrefix
A prefix for the keys used in the DEFS element. This can be used to ensure that the keys are unique when creating more than one SVG element for a single HTML page. -
gradientPaints
A map of all the gradients used, and the corresponding id. When generating the SVG file, all the gradient paints used must be defined in the defs element. -
linearGradientPaints
A map of all the linear gradients used, and the corresponding id. When generating the SVG file, all the linear gradient paints used must be defined in the defs element. -
radialGradientPaints
A map of all the radial gradients used, and the corresponding id. When generating the SVG file, all the radial gradient paints used must be defined in the defs element. -
clipPaths
A list of the registered clip regions. These will be written to the DEFS element. -
filePrefix
The filename prefix for images that are referenced rather than embedded but don't have anhref
supplied via theSVGHints.KEY_IMAGE_HREF
hint. -
fileSuffix
The filename suffix for images that are referenced rather than embedded but don't have anhref
supplied via theSVGHints.KEY_IMAGE_HREF
hint. -
imageElements
A list of images that are referenced but not embedded in the SVG. After the SVG is generated, the caller can make use of this list to write PNG files if they don't already exist. -
clip
The user clip (can be null). -
clipRef
The reference for the current clip. -
transform
The current transform. -
paint
The paint used to draw or fill shapes and text. -
color
-
composite
-
stroke
The current stroke. -
zeroStrokeWidth
private double zeroStrokeWidthThe width of the SVG stroke to use when the user supplies a BasicStroke with a width of 0.0 (in this case the Java specification says "If width is set to 0.0f, the stroke is rendered as the thinnest possible line for the target device and the antialias hint setting.") -
font
The last font that was set. -
fontRenderContext
The font render context. The fractional metrics flag solves the glyph positioning issue identified by Christoph Nahr: http://news.kynosarges.org/2014/06/28/glyph-positioning-in-jfreesvg-orsonpdf/ -
fontFunction
Generates the SVG font from the Java font family name (this function provides a hook for custom output formatting (for example putting quotes around the font family name - see issue #27) and font substitutions. -
background
The background color, used by clearRect(). -
fmImage
An internal image used for font metrics. -
fmImageG2D
The graphics target for the internal image that is used for font metrics. -
line
An instance that is lazily instantiated in drawLine and then subsequently reused to avoid creating a lot of garbage. -
rect
An instance that is lazily instantiated in fillRect and then subsequently reused to avoid creating a lot of garbage. -
roundRect
An instance that is lazily instantiated in draw/fillRoundRect and then subsequently reused to avoid creating a lot of garbage. -
oval
An instance that is lazily instantiated in draw/fillOval and then subsequently reused to avoid creating a lot of garbage. -
arc
An instance that is reused in draw/fillArc to avoid creating a lot of garbage. -
gradientPaintRef
If the current paint is an instance ofGradientPaint
, this field will contain the reference id that is used in the DEFS element for that linear gradient. -
deviceConfiguration
The device configuration (this is lazily instantiated in the getDeviceConfiguration() method). -
elementIDs
A set of element IDs. -
DEFAULT_STROKE_CAP
- See Also:
-
DEFAULT_STROKE_JOIN
- See Also:
-
DEFAULT_MITER_LIMIT
private static final float DEFAULT_MITER_LIMIT- See Also:
-
-
Constructor Details
-
SVGGraphics2D
public SVGGraphics2D(double width, double height) Creates a new instance with the specified width and height.- Parameters:
width
- the width of the SVG element.height
- the height of the SVG element.
-
SVGGraphics2D
Creates a new instance with the specified width and height in the given units.- Parameters:
width
- the width of the SVG element.height
- the height of the SVG element.units
- the units for the width and height (null
permitted).- Since:
- 3.2
-
SVGGraphics2D
Creates a new instance with the specified width and height that will populate the suppliedStringBuilder
instance.- Parameters:
width
- the width of the SVG element.height
- the height of the SVG element.units
- the units for the width and height (null
permitted).sb
- the string builder (null
not permitted).- Since:
- 3.2
-
SVGGraphics2D
Creates a new instance that is a child of the supplied parent.- Parameters:
parent
- the parent (null
not permitted).
-
-
Method Details
-
getWidth
public double getWidth()Returns the width for the SVG element, specified in the constructor. This value will be written to the SVG element returned by thegetSVGElement()
method.- Returns:
- The width for the SVG element.
-
getHeight
public double getHeight()Returns the height for the SVG element, specified in the constructor. This value will be written to the SVG element returned by thegetSVGElement()
method.- Returns:
- The height for the SVG element.
-
getUnits
Returns the units for the width and height of the SVG element's viewport, as specified in the constructor. The default value isnull
).- Returns:
- The units (possibly
null
). - Since:
- 3.2
-
getCheckStrokeControlHint
public boolean getCheckStrokeControlHint()Returns the flag that controls whether or not this object will observe theKEY_STROKE_CONTROL
rendering hint. The default value istrue
.- Returns:
- A boolean.
- Since:
- 2.0
- See Also:
-
setCheckStrokeControlHint
public void setCheckStrokeControlHint(boolean check) Sets the flag that controls whether or not this object will observe theKEY_STROKE_CONTROL
rendering hint. When enabled (the default), a hint to normalise strokes will write astroke-style
attribute with the valuecrispEdges
.- Parameters:
check
- the new flag value.- Since:
- 2.0
- See Also:
-
getDefsKeyPrefix
Returns the prefix used for all keys in the DEFS element. The default value is"_"+ String.valueOf(System.nanoTime())
.- Returns:
- The prefix string (never
null
). - Since:
- 1.9
-
setDefsKeyPrefix
Sets the prefix that will be used for all keys in the DEFS element. If required, this must be set immediately after construction (before any content generation methods have been called).- Parameters:
prefix
- the prefix (null
not permitted).- Since:
- 1.9
-
getGeomDoubleConverter
Returns the double-to-string function that is used when writing coordinates for geometrical shapes in the SVG output. The default function uses the Ryu algorithm for speed (see class description for more details).- Returns:
- The double-to-string function (never
null
). - Since:
- 5.0
-
setGeomDoubleConverter
Sets the double-to-string function that is used when writing coordinates for geometrical shapes in the SVG output. The default converter optimises for speed when generating the SVG and should cover normal usage. However, this method provides the ability to substitute an alternative function (for example, one that favours output size over speed of generation).- Parameters:
converter
- the convertor function (null
not permitted).- Since:
- 5.0
- See Also:
-
getTransformDoubleConverter
Returns the double-to-string function that is used when writing values for matrix transformations in the SVG output.- Returns:
- The double-to-string function (never
null
). - Since:
- 5.0
-
setTransformDoubleConverter
Sets the double-to-string function that is used when writing coordinates for matrix transformations in the SVG output. The default converter optimises for speed when generating the SVG and should cover normal usage. However this method provides the ability to substitute an alternative function (for example, one that favours output size over speed of generation).- Parameters:
converter
- the convertor function (null
not permitted).- Since:
- 5.0
- See Also:
-
getFilePrefix
Returns the prefix used to generate a filename for an image that is referenced from, rather than embedded in, the SVG element.- Returns:
- The file prefix (never
null
). - Since:
- 1.5
-
setFilePrefix
Sets the prefix used to generate a filename for any image that is referenced from the SVG element.- Parameters:
prefix
- the new prefix (null
not permitted).- Since:
- 1.5
-
getFileSuffix
Returns the suffix used to generate a filename for an image that is referenced from, rather than embedded in, the SVG element.- Returns:
- The file suffix (never
null
). - Since:
- 1.5
-
setFileSuffix
Sets the suffix used to generate a filename for any image that is referenced from the SVG element.- Parameters:
suffix
- the new prefix (null
not permitted).- Since:
- 1.5
-
getZeroStrokeWidth
public double getZeroStrokeWidth()Returns the width to use for the SVG stroke when the AWT stroke specified has a zero width (the default value is0.1
). In the Java specification forBasicStroke
it states "If width is set to 0.0f, the stroke is rendered as the thinnest possible line for the target device and the antialias hint setting." We don't have a means to implement that accurately since we must specify a fixed width.- Returns:
- The width.
- Since:
- 1.9
-
setZeroStrokeWidth
public void setZeroStrokeWidth(double width) Sets the width to use for the SVG stroke when the current AWT stroke has a width of 0.0.- Parameters:
width
- the new width (must be 0 or greater).- Since:
- 1.9
-
getDeviceConfiguration
Returns the device configuration associated with thisGraphics2D
.- Specified by:
getDeviceConfiguration
in classGraphics2D
- Returns:
- The graphics configuration.
-
create
Creates a new graphics object that is a copy of this graphics object (except that it has not accumulated the drawing operations). Not sure yet when or why this would be useful when creating SVG output. Note that thefontFunction
object (getFontFunction()
) is shared between the existing instance and the new one. -
getPaint
Returns the paint used to draw or fill shapes (or text). The default value isColor.BLACK
.- Specified by:
getPaint
in classGraphics2D
- Returns:
- The paint (never
null
). - See Also:
-
setPaint
Sets the paint used to draw or fill shapes (or text). Ifpaint
is an instance ofColor
, this method will also update the current color attribute (seegetColor()
). If you passnull
to this method, it does nothing (in accordance with the JDK specification).- Specified by:
setPaint
in classGraphics2D
- Parameters:
paint
- the paint (null
is permitted but ignored).- See Also:
-
getColor
Returns the foreground color. This method exists for backwards compatibility in AWT, you should use thegetPaint()
method. -
setColor
Sets the foreground color. This method exists for backwards compatibility in AWT, you should use thesetPaint(java.awt.Paint)
method. -
getBackground
Returns the background color. The default value isColor.BLACK
. This is used by theclearRect(int, int, int, int)
method.- Specified by:
getBackground
in classGraphics2D
- Returns:
- The background color (possibly
null
). - See Also:
-
setBackground
Sets the background color. This is used by theclearRect(int, int, int, int)
method. The reference implementation allowsnull
for the background color, so we allow that too (but for that case, the clearRect method will do nothing).- Specified by:
setBackground
in classGraphics2D
- Parameters:
color
- the color (null
permitted).- See Also:
-
getComposite
Returns the current composite.- Specified by:
getComposite
in classGraphics2D
- Returns:
- The current composite (never
null
). - See Also:
-
setComposite
Sets the composite (onlyAlphaComposite
is handled).- Specified by:
setComposite
in classGraphics2D
- Parameters:
comp
- the composite (null
not permitted).- See Also:
-
getStroke
Returns the current stroke (used when drawing shapes).- Specified by:
getStroke
in classGraphics2D
- Returns:
- The current stroke (never
null
). - See Also:
-
setStroke
Sets the stroke that will be used to draw shapes.- Specified by:
setStroke
in classGraphics2D
- Parameters:
s
- the stroke (null
not permitted).- See Also:
-
getRenderingHint
Returns the current value for the specified hint. See theSVGHints
class for information about the hints that can be used withSVGGraphics2D
.- Specified by:
getRenderingHint
in classGraphics2D
- Parameters:
hintKey
- the hint key (null
permitted, but the result will benull
also).- Returns:
- The current value for the specified hint
(possibly
null
). - See Also:
-
setRenderingHint
Sets the value for a hint. See theSVGHints
class for information about the hints that can be used with this implementation.- Specified by:
setRenderingHint
in classGraphics2D
- Parameters:
hintKey
- the hint key (null
not permitted).hintValue
- the hint value.- See Also:
-
getRenderingHints
Returns a copy of the rendering hints. Modifying the returned copy will have no impact on the state of thisGraphics2D
instance.- Specified by:
getRenderingHints
in classGraphics2D
- Returns:
- The rendering hints (never
null
). - See Also:
-
setRenderingHints
Sets the rendering hints to the specified collection.- Specified by:
setRenderingHints
in classGraphics2D
- Parameters:
hints
- the new set of hints (null
not permitted).- See Also:
-
addRenderingHints
Adds all the supplied rendering hints.- Specified by:
addRenderingHints
in classGraphics2D
- Parameters:
hints
- the hints (null
not permitted).
-
appendOptionalElementIDFromHint
A utility method that appends an optional element id if one is specified via the rendering hints.- Parameters:
builder
- the string builder (null
not permitted).
-
draw
Draws the specified shape with the currentpaint
andstroke
. There is direct handling forLine2D
,Rectangle2D
,Ellipse2D
andPath2D
. All other shapes are mapped to aGeneralPath
and then drawn (effectively asPath2D
objects).- Specified by:
draw
in classGraphics2D
- Parameters:
s
- the shape (null
not permitted).- See Also:
-
fill
Fills the specified shape with the currentpaint
. There is direct handling forRectangle2D
,Ellipse2D
andPath2D
. All other shapes are mapped to aGeneralPath
and then filled.- Specified by:
fill
in classGraphics2D
- Parameters:
s
- the shape (null
not permitted).- See Also:
-
getSVGPathData
Creates an SVG path string for the supplied Java2D path.- Parameters:
path
- the path (null
not permitted).- Returns:
- An SVG path string.
-
getAlpha
private float getAlpha()Returns the current alpha (transparency) in the range 0.0 to 1.0. If the current composite is anAlphaComposite
we read the alpha value from there, otherwise this method returns 1.0.- Returns:
- The current alpha (transparency) in the range 0.0 to 1.0.
-
svgColorStr
Returns an SVG color string based on the current paint. To handleGradientPaint
we rely on thesetPaint()
method having set thegradientPaintRef
attribute.- Returns:
- An SVG color string.
-
rgbColorStr
Returns the SVG RGB color string for the specified color.- Parameters:
c
- the color (null
not permitted).- Returns:
- The SVG RGB color string.
-
rgbaColorStr
Returns a string representing the specified color in RGBA format.- Parameters:
c
- the color (null
not permitted).- Returns:
- The SVG RGBA color string.
-
strokeStyle
Returns a stroke style string based on the current stroke and alpha settings. Implementation note: the last attribute in the string will not have a semicolon after it.- Returns:
- A stroke style string.
-
getColorAlpha
private float getColorAlpha()Returns the alpha value of the currentpaint
, or1.0f
if it is not an instance ofColor
.- Returns:
- The alpha value (in the range
0.0
to1.0
).
-
getSVGFillStyle
Returns a fill style string based on the current paint and alpha settings.- Returns:
- A fill style string.
-
getFont
Returns the current font used for drawing text. -
setFont
Sets the font to be used for drawing text. -
getFontFunction
Returns the function that generates SVG font references from a supplied Java font family name. The default function will convert Java logical font names to the equivalent SVG generic font name, pass-through all other font names unchanged, and surround the result in single quotes.- Returns:
- The font mapper (never
null
). - Since:
- 5.0
- See Also:
-
setFontFunction
Sets the font function that is used to generate SVG font references from Java font family names.- Parameters:
fontFunction
- the font mapper (null
not permitted).- Since:
- 5.0
-
getFontSizeUnits
Returns the font size units. The default value isSVGUnits.PX
.- Returns:
- The font size units.
- Since:
- 3.4
-
setFontSizeUnits
Sets the font size units. In general, if this method is used it should be called immediately after theSVGGraphics2D
instance is created and before any content is generated.- Parameters:
fontSizeUnits
- the font size units (null
not permitted).- Since:
- 3.4
-
getSVGFontStyle
Returns a string containing font style info.- Returns:
- A string containing font style info.
-
getFontMetrics
Returns the font metrics for the specified font.- Specified by:
getFontMetrics
in classGraphics
- Parameters:
f
- the font.- Returns:
- The font metrics.
-
getFontRenderContext
Returns the font render context.- Specified by:
getFontRenderContext
in classGraphics2D
- Returns:
- The font render context (never
null
).
-
drawString
Draws a string at(x, y)
. The start of the text at the baseline level will be aligned with the(x, y)
point.
Note that you can make use of theSVGHints.KEY_TEXT_RENDERING
hint when drawing strings (this is completely optional though).- Specified by:
drawString
in classGraphics2D
- Parameters:
str
- the string (null
not permitted).x
- the x-coordinate.y
- the y-coordinate.- See Also:
-
drawString
Draws a string at(x, y)
. The start of the text at the baseline level will be aligned with the(x, y)
point.
Note that you can make use of theSVGHints.KEY_TEXT_RENDERING
hint when drawing strings (this is completely optional though).- Specified by:
drawString
in classGraphics2D
- Parameters:
str
- the string (null
not permitted).x
- the x-coordinate.y
- the y-coordinate.
-
drawString
Draws a string of attributed characters at(x, y)
. The call is delegated todrawString(AttributedCharacterIterator, float, float)
.- Specified by:
drawString
in classGraphics2D
- Parameters:
iterator
- an iterator for the characters.x
- the x-coordinate.y
- the x-coordinate.
-
drawString
Draws a string of attributed characters at(x, y)
.- Specified by:
drawString
in classGraphics2D
- Parameters:
iterator
- an iterator over the characters (null
not permitted).x
- the x-coordinate.y
- the y-coordinate.
-
drawGlyphVector
Draws the specified glyph vector at the location(x, y)
.- Specified by:
drawGlyphVector
in classGraphics2D
- Parameters:
g
- the glyph vector (null
not permitted).x
- the x-coordinate.y
- the y-coordinate.
-
translate
public void translate(int tx, int ty) Applies the translation(tx, ty)
. This call is delegated totranslate(double, double)
.- Specified by:
translate
in classGraphics2D
- Parameters:
tx
- the x-translation.ty
- the y-translation.- See Also:
-
translate
public void translate(double tx, double ty) Applies the translation(tx, ty)
.- Specified by:
translate
in classGraphics2D
- Parameters:
tx
- the x-translation.ty
- the y-translation.
-
rotate
public void rotate(double theta) Applies a rotation (anti-clockwise) about(0, 0)
.- Specified by:
rotate
in classGraphics2D
- Parameters:
theta
- the rotation angle (in radians).
-
rotate
public void rotate(double theta, double x, double y) Applies a rotation (anti-clockwise) about(x, y)
.- Specified by:
rotate
in classGraphics2D
- Parameters:
theta
- the rotation angle (in radians).x
- the x-coordinate.y
- the y-coordinate.
-
scale
public void scale(double sx, double sy) Applies a scale transformation.- Specified by:
scale
in classGraphics2D
- Parameters:
sx
- the x-scaling factor.sy
- the y-scaling factor.
-
shear
public void shear(double shx, double shy) Applies a shear transformation. This is equivalent to the following call to thetransform
method:
-
transform(AffineTransform.getShearInstance(shx, shy));
- Specified by:
shear
in classGraphics2D
- Parameters:
shx
- the x-shear factor.shy
- the y-shear factor.
-
-
transform
Applies this transform to the existing transform by concatenating it.- Specified by:
transform
in classGraphics2D
- Parameters:
t
- the transform (null
not permitted).
-
getTransform
Returns a copy of the current transform.- Specified by:
getTransform
in classGraphics2D
- Returns:
- A copy of the current transform (never
null
). - See Also:
-
setTransform
Sets the transform.- Specified by:
setTransform
in classGraphics2D
- Parameters:
t
- the new transform (null
permitted, resets to the identity transform).- See Also:
-
hit
Returnstrue
if the rectangle (in device space) intersects with the shape (the interior, ifonStroke
isfalse
, otherwise the stroked outline of the shape).- Specified by:
hit
in classGraphics2D
- Parameters:
rect
- a rectangle (in device space).s
- the shape.onStroke
- test the stroked outline only?- Returns:
- A boolean.
-
setPaintMode
public void setPaintMode()Does nothing in thisSVGGraphics2D
implementation.- Specified by:
setPaintMode
in classGraphics
-
setXORMode
Does nothing in thisSVGGraphics2D
implementation.- Specified by:
setXORMode
in classGraphics
- Parameters:
c
- ignored
-
getClipBounds
Returns the bounds of the user clipping region.- Specified by:
getClipBounds
in classGraphics
- Returns:
- The clip bounds (possibly
null
). - See Also:
-
getClip
Returns the user clipping region. The initial default value isnull
. -
setClip
Sets the user clipping region. -
registerClip
Registers the clip so that we can later write out all the clip definitions in the DEFS element.- Parameters:
clip
- the clip (ignored ifnull
)
-
transformDP
Returns a string representation of the specified number for use in the SVG output.- Parameters:
d
- the number.- Returns:
- A string representation of the number.
-
geomDP
Returns a string representation of the specified number for use in the SVG output.- Parameters:
d
- the number.- Returns:
- A string representation of the number.
-
getSVGTransform
-
clip
Clips to the intersection of the current clipping region and the specified shape. According to the Oracle API specification, this method will accept anull
argument, however there is a bug report (opened in 2004 and fixed in 2021) that describes the passing ofnull
as "not recommended":- Specified by:
clip
in classGraphics2D
- Parameters:
s
- the clip shape (null
not recommended).
-
clipRect
public void clipRect(int x, int y, int width, int height) Clips to the intersection of the current clipping region and the specified rectangle. -
setClip
public void setClip(int x, int y, int width, int height) Sets the user clipping region to the specified rectangle. -
drawLine
public void drawLine(int x1, int y1, int x2, int y2) Draws a line from(x1, y1)
to(x2, y2)
using the currentpaint
andstroke
. -
fillRect
public void fillRect(int x, int y, int width, int height) Fills the specified rectangle with the currentpaint
. -
clearRect
public void clearRect(int x, int y, int width, int height) Clears the specified rectangle by filling it with the current background color. If the background color isnull
, this method will do nothing. -
drawRoundRect
public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) Draws a rectangle with rounded corners using the currentpaint
andstroke
.- Specified by:
drawRoundRect
in classGraphics
- Parameters:
x
- the x-coordinate.y
- the y-coordinate.width
- the width.height
- the height.arcWidth
- the arc-width.arcHeight
- the arc-height.- See Also:
-
fillRoundRect
public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) Fills a rectangle with rounded corners using the currentpaint
.- Specified by:
fillRoundRect
in classGraphics
- Parameters:
x
- the x-coordinate.y
- the y-coordinate.width
- the width.height
- the height.arcWidth
- the arc-width.arcHeight
- the arc-height.- See Also:
-
drawOval
public void drawOval(int x, int y, int width, int height) Draws an oval framed by the rectangle(x, y, width, height)
using the currentpaint
andstroke
. -
fillOval
public void fillOval(int x, int y, int width, int height) Fills an oval framed by the rectangle(x, y, width, height)
. -
drawArc
public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) Draws an arc contained within the rectangle(x, y, width, height)
, starting atstartAngle
and continuing througharcAngle
degrees using the currentpaint
andstroke
. -
fillArc
public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) Fills an arc contained within the rectangle(x, y, width, height)
, starting atstartAngle
and continuing througharcAngle
degrees, using the currentpaint
. -
drawPolyline
public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) Draws the specified multi-segment line using the currentpaint
andstroke
.- Specified by:
drawPolyline
in classGraphics
- Parameters:
xPoints
- the x-points.yPoints
- the y-points.nPoints
- the number of points to use for the polyline.
-
drawPolygon
public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) Draws the specified polygon using the currentpaint
andstroke
.- Specified by:
drawPolygon
in classGraphics
- Parameters:
xPoints
- the x-points.yPoints
- the y-points.nPoints
- the number of points to use for the polygon.- See Also:
-
fillPolygon
public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) Fills the specified polygon using the currentpaint
.- Specified by:
fillPolygon
in classGraphics
- Parameters:
xPoints
- the x-points.yPoints
- the y-points.nPoints
- the number of points to use for the polygon.- See Also:
-
getPNGBytes
Returns the bytes representing a PNG format image.- Parameters:
img
- the image to encode (null
not permitted).- Returns:
- The bytes representing a PNG format image.
-
drawImage
Draws an image at the location(x, y)
. Note that theobserver
is ignored. -
drawImage
Draws the image into the rectangle defined by(x, y, w, h)
. Note that theobserver
is ignored (it is not useful in this context). -
drawImage
Draws an image at the location(x, y)
. Note that theobserver
is ignored. -
drawImage
public boolean drawImage(Image img, int x, int y, int w, int h, Color bgcolor, ImageObserver observer) Draws an image to the rectangle(x, y, w, h)
(scaling it if required), first filling the background with the specified color. Note that theobserver
is ignored. -
drawImage
public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) Draws part of an image (defined by the source rectangle(sx1, sy1, sx2, sy2)
) into the destination rectangle(dx1, dy1, dx2, dy2)
. Note that theobserver
is ignored.- Specified by:
drawImage
in classGraphics
- Parameters:
img
- the image.dx1
- the x-coordinate for the top left of the destination.dy1
- the y-coordinate for the top left of the destination.dx2
- the x-coordinate for the bottom right of the destination.dy2
- the y-coordinate for the bottom right of the destination.sx1
- the x-coordinate for the top left of the source.sy1
- the y-coordinate for the top left of the source.sx2
- the x-coordinate for the bottom right of the source.sy2
- the y-coordinate for the bottom right of the source.- Returns:
true
if the image is drawn.
-
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) Draws part of an image (defined by the source rectangle(sx1, sy1, sx2, sy2)
) into the destination rectangle(dx1, dy1, dx2, dy2)
. The destination rectangle is first cleared by filling it with the specifiedbgcolor
. Note that theobserver
is ignored.- Specified by:
drawImage
in classGraphics
- Parameters:
img
- the image.dx1
- the x-coordinate for the top left of the destination.dy1
- the y-coordinate for the top left of the destination.dx2
- the x-coordinate for the bottom right of the destination.dy2
- the y-coordinate for the bottom right of the destination.sx1
- the x-coordinate for the top left of the source.sy1
- the y-coordinate for the top left of the source.sx2
- the x-coordinate for the bottom right of the source.sy2
- the y-coordinate for the bottom right of the source.bgcolor
- the background color (null
permitted).observer
- ignored.- Returns:
true
if the image is drawn.
-
drawRenderedImage
Draws the rendered image. Ifimg
isnull
this method does nothing.- Specified by:
drawRenderedImage
in classGraphics2D
- Parameters:
img
- the image (null
permitted).xform
- the transform.
-
drawRenderableImage
Draws the renderable image.- Specified by:
drawRenderableImage
in classGraphics2D
- Parameters:
img
- the renderable image.xform
- the transform.
-
drawImage
Draws an image with the specified transform. Note that theobserver
is ignored.- Specified by:
drawImage
in classGraphics2D
- Parameters:
img
- the image.xform
- the transform (null
permitted).obs
- the image observer (ignored).- Returns:
true
if the image is drawn.
-
drawImage
Draws the image resulting from applying theBufferedImageOp
to the specified image at the location(x, y)
.- Specified by:
drawImage
in classGraphics2D
- Parameters:
img
- the image.op
- the operation (null
permitted).x
- the x-coordinate.y
- the y-coordinate.
-
copyArea
public void copyArea(int x, int y, int width, int height, int dx, int dy) This method does nothing. The operation assumes that the output is in bitmap form, which is not the case for SVG, so we silently ignore this method call. -
dispose
public void dispose()This method does nothing, there are no resources to dispose. -
getSVGElement
Returns the SVG element that has been generated by calls to thisGraphics2D
implementation.- Returns:
- The SVG element.
-
getSVGElement
Returns the SVG element that has been generated by calls to thisGraphics2D
implementation, giving it the specifiedid
. Ifid
isnull
, the element will have noid
attribute.- Parameters:
id
- the element id (null
permitted).- Returns:
- A string containing the SVG element.
- Since:
- 1.8
-
getSVGElement
public String getSVGElement(String id, boolean includeDimensions, ViewBox viewBox, PreserveAspectRatio preserveAspectRatio, MeetOrSlice meetOrSlice) Returns the SVG element that has been generated by calls to thisGraphics2D
implementation, giving it the specifiedid
. Ifid
isnull
, the element will have noid
attribute. This method also allows for aviewBox
to be defined, along with the settings that handle scaling.- Parameters:
id
- the element id (null
permitted).includeDimensions
- include the width and height attributes?viewBox
- the view box specification (ifnull
then noviewBox
attribute will be defined).preserveAspectRatio
- the value of thepreserveAspectRatio
attribute (ifnull
then not attribute will be defined).meetOrSlice
- the value of the meetOrSlice attribute.- Returns:
- A string containing the SVG element.
- Since:
- 3.2
-
isDefsOutputRequired
private boolean isDefsOutputRequired()Returnstrue
if there are items that need to be written to the DEFS element, andfalse
otherwise.- Returns:
- A boolean.
-
getSVGDocument
Returns an SVG document (this contains the content returned by thegetSVGElement()
method, prepended with the required document header).- Returns:
- An SVG document.
-
getSVGImages
Returns the list of image elements that have been referenced in the SVG output but not embedded. If the image files don't already exist, you can use this list as the basis for creating the image files.- Returns:
- The list of image elements.
- See Also:
-
getElementIDs
Returns a new set containing the element IDs that have been used in output so far.- Returns:
- The element IDs.
- Since:
- 1.5
-
getLinearGradientElement
Returns an element to represent a linear gradient. All the linear gradients that are used get written to the DEFS element in the SVG.- Parameters:
id
- the reference id.paint
- the gradient.- Returns:
- The SVG element.
-
getLinearGradientElement
Returns an element to represent a linear gradient. All the linear gradients that are used get written to the DEFS element in the SVG.- Parameters:
id
- the reference id.paint
- the gradient.- Returns:
- The SVG element.
-
getRadialGradientElement
Returns an element to represent a radial gradient. All the radial gradients that are used get written to the DEFS element in the SVG.- Parameters:
id
- the reference id.rgp
- the radial gradient.- Returns:
- The SVG element.
-
getClipPathRef
Returns a clip path reference for the current user clip. This is written out on all SVG elements that draw or fill shapes or text.- Returns:
- A clip path reference.
-
setRect
private void setRect(int x, int y, int width, int height) Sets the attributes of the reusableRectangle2D
object that is used by theGraphics.drawRect(int, int, int, int)
andfillRect(int, int, int, int)
methods.- Parameters:
x
- the x-coordinate.y
- the y-coordinate.width
- the width.height
- the height.
-
setRoundRect
private void setRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) Sets the attributes of the reusableRoundRectangle2D
object that is used by thedrawRoundRect(int, int, int, int, int, int)
andfillRoundRect(int, int, int, int, int, int)
methods.- Parameters:
x
- the x-coordinate.y
- the y-coordinate.width
- the width.height
- the height.arcWidth
- the arc width.arcHeight
- the arc height.
-
setOval
private void setOval(int x, int y, int width, int height) Sets the attributes of the reusableEllipse2D
object that is used by thedrawOval(int, int, int, int)
andfillOval(int, int, int, int)
methods.- Parameters:
x
- the x-coordinate.y
- the y-coordinate.width
- the width.height
- the height.
-