Introducción
JFreeSVG es una herramienta que nos permite fácilmente generar gráficos de barras (y de otros tipos también) y exportar el resultado a un fichero SVG.
Depende del proyecto JFreeChart que permite crear diferentes tipos de gráficas para diferentes tipos de aplicaciones Java. Más información en http://www.jfree.org/jfreechart/.
Instalación
Es una herramienta empaquetada por lo que podemos gestionarla como una dependencia de Maven. Será suficiente con crear un proyecto de tipo Maven (sin especificar arquetipo) y añadir el siguiente bloque en nuestro pom.xml:
<dependency> <groupid>org.jfree</groupid> <artifactid>jfreechart</artifactid> <version>1.5.0</version> </dependency> <dependency> <groupid>org.jfree</groupid> <artifactid>jfreesvg</artifactid> <version>3.3</version> </dependency>
Uso básico
Después de lanzar Maven Update para conseguir descargar las dependencias, creamos un fichero principal Main.java con un único método main que será nuestro punto de entrada.
Acto seguido creamos dos métodos: uno que creará un set de datos y otro que configurará las opciones de renderizado. Desde el método principal llamaremos a estos métodos para más tarde lanzar el renderizado de la imagen.
Main.java
package com.luisgomezcaballero.jfreesvgdemo; import java.awt.Rectangle; import java.io.File; import java.io.IOException; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtils; import org.jfree.chart.JFreeChart; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.renderer.category.StatisticalBarRenderer; import org.jfree.data.category.CategoryDataset; import org.jfree.data.statistics.DefaultStatisticalCategoryDataset; import org.jfree.graphics2d.svg.SVGGraphics2D; import org.jfree.graphics2d.svg.SVGUtils; public class Main { private static CategoryDataset createDataset() { DefaultStatisticalCategoryDataset dataset = new DefaultStatisticalCategoryDataset(); dataset.add(30.0, null, "Row Key 1", "Column Key 1"); dataset.add(50.0, null, "Row Key 2", "Column Key 2"); dataset.add(40.0, null, "Row Key 3", "Column Key 3"); dataset.add(80.0, null, "Row Key 4", "Column Key 4"); dataset.add(60.0, null, "Row Key 5", "Column Key 5"); return dataset; } private static JFreeChart createChart(CategoryDataset dataset) { JFreeChart chart = ChartFactory.createLineChart("Title", "Category Axis Label", "Value Axis Label", dataset); CategoryPlot plot = (CategoryPlot) chart.getPlot(); StatisticalBarRenderer renderer = new StatisticalBarRenderer(); plot.setRenderer(renderer); ChartUtils.applyCurrentTheme(chart); renderer.setDefaultItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setDefaultItemLabelsVisible(true); return chart; } public static void main(String[] args) { JFreeChart chart = createChart(createDataset()); SVGGraphics2D g2 = new SVGGraphics2D(800, 600); Rectangle r = new Rectangle(0, 0, 800, 600); chart.draw(g2, r); File f = new File("Result.svg"); try { SVGUtils.writeToSVG(f, g2.getSVGElement()); } catch (IOException e) { e.printStackTrace(); } } }
Resultado
Lanzamos la aplicación haciendo clic derecho sobre el proyecto y después Java Run As/Java Application.
Esto generará un fichero .SVG en la raíz de nuestro proyecto, que variará dependiendo de los datos y la configuración visual que hemos especificado.
Es importante resaltar que este es un ejemplo muy básico y que las posibilidades de configuración del resultado final son muy amplias.
Repositorio
El código del proyecto ejemplo utilizado en esta publicación puede encontrarse en el siguiente repositorio: https://github.com/luisgomezcaballero/jfreesvg-demo.
So, what do you think ?