Трябва да експортирам диаграма на доджо във формат на изображение, за предпочитане PNG. За съжаление няма вградена функция, но намерих начин за това. Тъй като диаграмите на доджо са базирани на SVG графики:
Първо ще получа SVG низа, след като диаграмата бъде изобразена, след това ще изпратя този низ на сървъра чрез ajax и след това ще използвам php библиотеката ImageMagick, за да го конвертирам в PNG. Сега целият процес работи правилно, но има проблем:
SVG низът, който получавам от dojo Charts, не съдържа пълни подробности, заглавието на диаграмата и стойностите на осите и маркерите не присъстват в 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;
};
});
});