Как создать 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 в том смысле, что его можно использовать вместе с _ 2_ или 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