Как да създадете SVG с JFreeChart?

На уеб сайта на JFreeChart се казва, че библиотеката може да изведе диаграмата във векторен формат.

От сайта на JFreeChart:

  • поддръжка за много изходни типове, включително компоненти на Swing, файлове с изображения (включително PNG и JPEG) и векторни графични файлови формати (включително PDF, EPS и SVG);

Но как всъщност мога да изведа във формат SVG?

Има начин да се използва библиотеката Apache Batik, но от изявлението по-горе бих си помислил, че JFreeChart може да го направи без Batik.

Мога да разбера изхода за PNG и JPG в класа ChartUtilities, но изглежда няма клас за изход на векторна графика.


person super_ernie77    schedule 01.03.2012    source източник
comment
Тук има тема за това: jfree.org/phpBB2/viewtopic. php?f=3&t=24365   -  person assylias    schedule 01.03.2012
comment
@assylias Тази връзка вече е мъртва, спомняте ли си какво беше заключението на темата?   -  person Omnibyte    schedule 21.03.2019


Отговори (3)


Не, JFreeChart поддържа SVG в смисъл, че може да се използва във връзка с Batik или JFreeSVG, които са задължителни. Свързаните ресурси включват следните:

Отказ от отговорност: Не е свързан с Object Refinery Limited; просто доволен клиент и много малък сътрудник.

person trashgod    schedule 01.03.2012
comment
Благодаря за отговора! Така че това е библиотека Батик. - person super_ernie77; 05.03.2012
comment
JFreeSVG е друга опция, която е налична сега. - person David Gilbert; 23.11.2013

За да улесните другите читатели, следният код преобразува jFreeChart в SVG с помощта на jFreeSVG:

import org.jfree.graphics2d.svg.SVGGraphics2D;
import org.jfree.chart.JFreeChart;
import java.awt.geom.Rectangle2D;

public String getSvgXML(){
    final int widthOfSVG = 200;
    final int heightOfSVG = 200;
    final SVGGraphics2D svg2d = new SVGGraphics2D(widthOfSVG, heightOfSVG);

    final JFreeChart chart = createYourChart();
    chart.draw(svg2d,new Rectangle2D.Double(0, 0, widthOfSVG, heightOfSVG));

    final String svgElement = svg2d.getSVGElement();
    return svgElement;
}

За да запишете SVG елементите в PDF файл, можете да използвате следния код, за да генерирате байт[] от вашия SVG и след това да го запишете във файл. За този случай използвам apache batic:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import org.apache.batik.transcoder.Transcoder;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.fop.svg.PDFTranscoder;

public byte[] getSVGInPDF(){ 
     final Transcoder transcoder = new PDFTranscoder();
     final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
     final TranscoderInput transcoderInput = new TranscoderInput(
     new ByteArrayInputStream(getSvgXML().getBytes()));
     final TranscoderOutput transcoderOutput = new TranscoderOutput(outputStream);
     transcoder.transcode(transcoderInput, transcoderOutput);
     return outputStream.toByteArray();
}
person Farshad Bakhshandegan Moghadda    schedule 18.12.2018

В допълнение към отговора на trashgod

Изглежда, че JFreeSVG е много по-ефективен от Batik: http://www.object-refinery.com/blog/blog-20140423.html

person Sep    schedule 07.11.2014