我需要将道场图表导出为图像格式,最好是 PNG。不幸的是,没有内置功能,但我找到了解决方法。由于道场图表基于 SVG 图形:
我将在图表渲染后首先获取 SVG 字符串,然后通过 ajax 将此字符串发送到服务器,然后使用 ImageMagick php 库将其转换为 PNG。现在整个过程运行正常,但有一个问题:
我从 dojo Charts 获得的 SVG 字符串不包含完整的详细信息,图表标题和轴值以及标记不存在于 SVG 字符串中,可能是什么问题?
以下是我将提取的 SVG 字符串从 dojo Chart 重新打印到另一个 div 的代码,您可以直观地看到差异。
var mychart;
require(["dojo/ready", "dojox/charting/Chart2D", "dojox/gfx/utils", "dojox/charting/action2d/Tooltip", "dojox/charting/action2d/Highlight", "dojox/charting/themes/Claro"], function (ready, Chart, Utils, Tooltip, Highlight, ClaroTheme) {
ready(function () {
mychart = Chart("mychart");
mychart.title = "My Chart";
mychart.addPlot("column_plot", {
type: "Columns",
lines: true,
areas: false,
markers: true
});
var column_tooltip = new Tooltip(mychart, "column_plot");
var column_highlight = new Highlight(mychart, "column_plot");
mychart.addAxis("x", {vertical: false});
mychart.addAxis("y", {vertical: true});
mychart.addSeries("column_series", [1, 3, 5, 2, 6, 1, 0, 4, 6, 4, 1], {
plot: "column_plot"
});
mychart.setTheme(ClaroTheme);
mychart.render();
//this function will be called after render to send SVG to server via AJAX
document.getElementById("syncbutton").onclick = function (e) {
var svgString = Utils.toSvg(mychart.surface).results[0];
document.getElementById("svgchart").innerHTML = svgString;
};
});
});