A fast, lightweight Java library for creating Scalable Vector Graphics (SVG) output.
Version 5.0.5, by David Gilbert, 19 February 2023.
(C)opyright 2013-present, by David Gilbert. All rights reserved.
JFreeSVG is a graphics library for the Java(tm) platform that allows you to generate content in SVG format using the standard Java2D drawing API (Graphics2D
). JFreeSVG is light-weight, fast, and has no dependencies other than the Java runtime (11 or later).
The Javadocs for the SVGGraphics2D
class gives examples for typical usage, and if you are already familiar with the Java2D APIs, then all you need to do is add the JFreeSVG dependency and start coding.
Oracle provides tutorials for Java2D here:
There are some demonstration applications in the JFree-Demos project at GitHub.
JFreeSVG is published to the Central Repository. You can include it in your projects with the following dependency:
<dependency>
<groupId>org.jfree</groupId>
<artifactId>org.jfree.svg</artifactId>
<version>5.0.5</version>
</dependency>
JFreeSVG is a modular library with the module name org.jfree.svg
.
To use JFreeSVG with Java 8, you can use the following (note the different artifact ID):
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreesvg</artifactId>
<version>3.4.3</version>
</dependency>
You can build JFreeSVG
from sources using Maven:
mvn clean verify
To generate the Javadocs:
mvn clean compile javadoc:javadoc
JFreeSVG
is being tested using Graphics2D Tester and produces the output shown below. There are several areas that still need work:
AlphaComposite
are not implementedJFreeSVG is free software under the terms of the GNU General Public License version 3 (GPLv3) or later. The license file is included in this distribution (gpl-3.0.txt).
Please note that JFreeSVG is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Please refer to the license for details.
If you prefer not to be bound by the terms of the GPLv3, you can obtain an alternative license by sponsoring the JFree project:
Version 5.0.5 (19 February 2023)
drawArc()
and fillArc()
Version 5.0.4 (9 January 2023)
Version 5.0.3 (22 June 2022)
getClipPathRef()
Version 5.0.2 (7 November 2021)
TextAttribute.TRACKING
SVGHints.KEY_BEGIN_GROUP
Version 5.0.1 (4 August 2021)
GradientPaint
and RadialGradientPaint
;Ellipse2D
.Version 5.0 (12 June 2021)
geometryDP
and transformDP
attributes with function references (#35);RyuDouble
(#39);width
and height
attributes from int
to double
(#37);ViewBox
dimension attributes from int
to double
;draw(Shape)
and fill(Shape)
methods for more compact output;Version 4.2 (10 January 2021)
NumberFormat
with Ryu algorithm for performance gains (#30);Version 4.1 (26 March 2020)
Version 4.0 (27 February 2020)
org.jfree.svg
;drawArc()
and fillArc()
methods to draw pie arcs;java.util.Base64
instead of javax.xml.bind.DatatypeConverter
.Version 3.4 (10 February 2019)
org.jfree.jfreesvg
);drawString()
method for empty string;drawImage()
method for null
ImageOp
.Version 3.3 (7 November 2017)
DEFS
key prefix should not begin with a number;Version 3.2 (9 October 2016)
units
for width
and height
attributes;width
and height
from SVG element;viewBox
and associated parameters in the SVG element;NullPointerException
in drawImage(Image, AffineTransform, ImageObserver)
(bug #6);fontMapper
in create()
method (bug #5).Version 3.1 (30 April 2016)
FontMetrics
;ellipse
element to draw/fill Ellipse2D
instances;Version 3.0 (8 June 2015)
BasicStroke
cap, join and miterlimit;CanvasGraphics2D
implementation;PathIterator.SEG_CLOSE
;drawImage()
;ClassCastException
when exporting Swing UIs on MacOSX with Nimbus L&F.Version 2.1 (4 August 2014)
Version 2.0 (30 July 2014)
KEY_STROKE_CONTROL
rendering hints;create()
method so that Swing components can be rendered correctly;rgb()
rather than rgba()
, and write the alpha value to separate opacity attribute;Version 1.9 (6 May 2014)
defsKeyPrefix
attribute to allow unique ids for DEFS when generating multiple SVG elements for use in a single HTML page;LinearGradientPaint
and improved existing GradientPaint
handling;KEY_ELEMENT_TITLE
rendering hint;KEY_START_GROUP
handler;zeroStrokeWidth
attribute to allow configuration of handling for BasicStroke
with zero width (which the Java specification states should be "rendered as the thinnest possible line");drawImage(Image, int, int, int, int, int, int, int, int, ImageObserver)
method.Version 1.8 (11 April 2014)
KEY_BEGIN_GROUP
options, plus special integration support for Orson Charts;Stroke
is not an instance of BasicStroke
;SVGUtils.writeToSVG()
and SVGUtils.writeToHTML()
.Version 1.7 (25 February 2014)
SVGHints.KEY_BEGIN_GROUP
and SVGHints.KEY_END_GROUP
to allow grouping of SVG output;drawString()
to include id if SVGHints.KEY_ELEMENT_ID
is set;Version 1.6 (18 December 2013)
Version 1.5 (18 December 2013)
FontMapper
to ensure that Java logical font names map to the equivalent SVG generic font names;SVGHints.KEY_IMAGE_HREF
to allow image references to be specified;SVGHints.KEY_ELEMENT_ID
to allow an element id to be supplied for the next element to be written;drawString()
;Version 1.4 (24 October 2013)
getSVGFontStyle()
now specifies font-size units as required by the SVG standard. Fixes a bug that is visible when the SVG output is rendered in FireFox (which is more strict about the standard than other browsers);drawString()
method;SVGHint
to configure the value of the text-rendering attribute.Version 1.3 (24 September 2013)
getDeviceConfiguration()
method;setClip(null)
;preserveAspectRatio
attribute for images;Version 1.2 (13 September 2013)
linearGradient
element, to pass W3C validator;RadialGradientPaint
;SVGUtils.writeToSVG()
method;SVGTimeSeriesChartDemo1.java
.Version 1.1 (4 September 2013)
drawString(AttributedCharacterIterator, float, float)
using TextLayout
and modified drawGlyphVector()
to fill rather than stroke shapes (for SVG/CanvasGraphics2D
);SVGGraphics2D
;geomDP
and transformDP
attributes to CanvasGraphics2D
to control number of decimal places for numbers written to script;Version 1.0 (31 July 2013)