将JfreeChart添加到SVG图像

时间:2013-08-22 18:38:06

标签: java svg jfreechart batik

我有一个SVG图像(国家/地区的地图),我正在尝试在其上添加一个JfreeChart,它将在特定位置显示3d条形图。有人可以请帮助指出如何将JfreeChart添加到现有的SVG图像。

以下是到目前为止的代码

            String parser = XMLResourceDescriptor.getXMLParserClassName();
            SAXSVGDocumentFactory sax = new SAXSVGDocumentFactory(parser);
            String uri = "file:///F://WorldMap.svg"; 
            SVGDocument doc = sax.createSVGDocument(uri); 
            SVGGraphics2D my_svg_generator = new SVGGraphics2D(doc);

            // Create a converter for this document.
            SVGGraphics2D g = new SVGGraphics2D(doc);

            //got a JfreeChart from a static method depending on data
            JFreeChart chart = createChart(createDataset());
            //I can add up normal nodes
            Element svgRoot = doc.getDocumentElement();
            svgRoot.appendChild(doc.createElementNS("http://www.w3.org/2000/svg", "rect"));

我尝试将Jfreechart转换为Bytes并使用g.drawBytes(),但它在SVG之上渲染了一些垃圾。

如果有人可以提供帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

jfreechart是一个图像,因此您需要创建一个图像元素,然后将jfreechart数据转换为数据uri,并将数据URL设置为图像的xlink:href属性。

jfreechart可以生成gif,png或jpeg图像,因此您必须适当调整data uri,但对于png图像应该如此。

<image xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" />

不要忘记将字节数据转换为base64。有各种base64 encoders around