java - 将 JfreeChart 添加到 SVG 图像

标签 java svg jfreechart batik

我有一个 SVG 图像(一个国家的 map ),我试图在其顶部添加一个 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 转换为字节并使用 g.drawBytes(),但它在 SVG 顶部呈现一些垃圾。

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

最佳答案

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

关于java - 将 JfreeChart 添加到 SVG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18388353/

相关文章:

css - 修复 SVG 高度但允许水平缩放

html - 带有内部图像的 Svg 未在 Safari 中显示

java - 如何在库存条形图上绘制十字准线

java - log4j2 生成具有旧日期的文件夹 - Spring Boot

java - 在 Guice 中使用 Mapbinder 在模块中使用 Inject

javascript - 拉斐尔 : trying to add semi-animated text to Spinner graphic

java - 获取现有图表的渲染器

java - 更改条形图的 SeriesPaint

java - 递归java - 不同的是for循环不理解如何工作

java - 从数组中查找元素的最大长度