dojo charting on nodejs
5759 ワード
nodejsでdojoを実行する文章が多いですが、dojox.chatingを具体的に使う資料が見つけられません.
node-canvasのようなオープンソースのプロジェクトは、理論的にはdojoが生成した図をファイルとして保存することができます.jsグラフライブラリの多くは座標軸の目盛文字をhtmlで表示しています.このようにホームページ上で写真に保存できません.ライブラリのテキストは完全にcanvasに生成され、dojoグラフは軸文字を設定してhtmlまたはcanvasに生成することができます.以下は具体的なプロセスとコードです.
環境:
1.node-canvas windowsインストール参照
文書、簡単に言えば、
Python 2.7.3をインストールし、環境変数を設定します.
Microsoft Visual C++2010 Expressをインストールします.
ダウンロード
cairo libraryは、C:\GTKに伸張し、環境変数を設定する.
npm udate-g npm
npm install-g node-gyp
npm install canvas
2.dojox.chatingで使うdomに関するものなので、jsdomをインストールしてコードを調整してください.
npm install jsdom
原則としてdojoコードを変更せず、ダウンロードしたライブラリを変更しないと、ファイルが一つしかないので、しょうがないです.
ドジョウbase/window.jsの中に一つあります.
コード:
1.起動コード:boot.js
文字が表示できないのはdojox/gfx/_ベースの中:
titleを表示するには、フォントを設定する必要があります.titleはデフォルトではhtmlで表示されますので、dojox/charting/Chartの中を修正します.
もう一つの考えがある.
svg png,それはhighchartを使っています.
node-canvasのようなオープンソースのプロジェクトは、理論的にはdojoが生成した図をファイルとして保存することができます.jsグラフライブラリの多くは座標軸の目盛文字をhtmlで表示しています.このようにホームページ上で写真に保存できません.ライブラリのテキストは完全にcanvasに生成され、dojoグラフは軸文字を設定してhtmlまたはcanvasに生成することができます.以下は具体的なプロセスとコードです.
環境:
1.node-canvas windowsインストール参照
文書、簡単に言えば、
Python 2.7.3をインストールし、環境変数を設定します.
Microsoft Visual C++2010 Expressをインストールします.
ダウンロード
cairo libraryは、C:\GTKに伸張し、環境変数を設定する.
npm udate-g npm
npm install-g node-gyp
npm install canvas
2.dojox.chatingで使うdomに関するものなので、jsdomをインストールしてコードを調整してください.
npm install jsdom
原則としてdojoコードを変更せず、ダウンロードしたライブラリを変更しないと、ファイルが一つしかないので、しょうがないです.
ドジョウbase/window.jsの中に一つあります.
doc: this["document"] || null,
を変更しましたdoc: this["document"] || window.document || null,
他のライブラリは変更せずに自分のコードにセットすればいいです.コード:
1.起動コード:boot.js
var jsdom = require("jsdom").jsdom;
var document = jsdom("<html><head></head><body style='display:block;'><div id='StackedColumns_numbers' width='400' height='300' style=''></div></body></html>", require("jsdom").level(2, "core"));
window = document.createWindow();
navigator = window.navigator;
global.dojoConfig = {
async: true,
forceGfxRenderer: 'canvas',
gfxRenderer: 'canvas',
basePath: ".",
packages: [{
name: "dojo",
location: "lib/dojo"
},{
name: "dojox",
location: "lib/dojox"
},{
name: "mynode",
location: "mynode"
}],
deps: ["mynode/main"]
};
require("./lib/dojo/dojo.js");
2.メインプログラム:mynode/main.js
define(["dojo/_base/declare", "dojo/_base/lang", "dojo/dom", "dojo/node!fs",
"dojo/ready","dojox/charting/Chart", "dojox/charting/axis2d/Default",
"dojox/charting/plot2d/StackedColumns"],
function(declare, lang, dom, fs, ready, Chart, Default, StackedColumns){
ready(function(){
// StackedColumns, array of numbers
var chart6 = new Chart("StackedColumns_numbers",{title: ""});
chart6.addAxis("x", {fixLower: "major",htmlLabels: false, fixUpper: "major"});
chart6.addAxis("y", {vertical: true, htmlLabels: false,fixLower: "minor", fixUpper: "minor", natural: true, includeZero: true});
chart6.addPlot("default", {type: StackedColumns, gap: 5});
chart6.addSeries("Series A", [1, 2, 3, 4, 5], {fill: "red"});
chart6.addSeries("Series B", [5, 4, 3, 2, 1], {fill: "blue"});
chart6.render();
setTimeout(function(){
var div = dom.byId("StackedColumns_numbers");
console.log("========"+div.children);
for (var i=0;i<div.children.length;i++) {
if(div.children[i].createPNGStream){
console.log("========"+div.children[i]);
var canvas = div.children[i];
var out = fs.createWriteStream('charting.png')
, stream = canvas.createPNGStream();
stream.on('data', function(chunk){
out.write(chunk);
});
}
}
}, 0);
});
});
setTimeoutを使うのはdojox/gfx/canvas.jsにsetTimeoutが使われているからです.makeDirty: function(){
// summary:
// internal method, which is called when we may need to redraw
if(!this.pendingImagesCount && !("pendingRender" in this)){
this.pendingRender = setTimeout(lang.hitch(this, this._render), 0);
}
},
3 node boot.jsを実行して画像ファイルを生成します.以下は軸上の文字とタイトルの問題を解決します.文字が表示できないのはdojox/gfx/_ベースの中:
px_in_pt: function(){
// summary:
// returns the current number of pixels per point.
return g._base._getCachedFontMeasurements()["12pt"] / 12 || 1; // Number
},
「𞓜𞓜1」は後加で、domを作成することによってnodejsの中で行が通過しないと計算されますので、直接に1に戻ります.titleを表示するには、フォントを設定する必要があります.titleはデフォルトではhtmlで表示されますので、dojox/charting/Chartの中を修正します.
var forceHtmlLabels = (g.renderer == "canvas"),
labelType = 'gfx';//forceHtmlLabels || !has("ie") && !has("opera") ? "html" : "gfx",
tsize = g.normalizedLength(g.splitFontString(this.titleFont).size);
ここで直接'gfx'を使います.titleのコードを設定しますvar chart6 = new Chart("StackedColumns_numbers",{title: "aaa",titleFont: "normal normal normal 8pt , Arial, sans-serif",});
chart6.addAxis("x", {fixLower: "major",htmlLabels: false, fixUpper: "major", natural: true});
は中国語の問題を解決するのが面倒くさいので、コンパイルする時はnode-canvasに国際化を支持させます.もう一つの考えがある.
svg png,それはhighchartを使っています.