2017-08-08 31 views
2

canvas2svg.jsを使用してchart.jsグラフをsvgにエクスポートしようとしています。canvas2svg.jsを使用してchart.jsグラフをsvgにエクスポート

chart.jsがcanvas2svg.jsにより作成された '偽の' キャンバスを使用することを拒否するのでそれは、動作しているようだしない

私のHTMLコード:

<div style="position: relative; height:20vh; width:100vh"> 
<canvas id="radarCanvas" ></canvas> 
</div> 

マイスクリプト:

var ctx = document.getElementById("radarCanvas").getContext("2d"); 

var radarChart = new Chart(ctx, graphData); // Works fine 


// Create canvas2svg 'fake' context 
var c2s = C2S(500,500); 

// new chart on 'fake' context fails: 
var mySvg = new Chart(c2s, graphData); 
// Result (console): 
// "Failed to create chart: can't acquire context from the given item" 

私はCodepenに完全な例を掲載しました(長いjs私はcanvas2svgをインポートするリンクを見つけることができませんでしたので、スクリプトの初めに貼り付けました。)

+0

また、私は言及した2つのライブラリのどちらも主張していません。 SVGに書き出すことができる素晴らしい(好ましくはアニメーション化された)レーダー/極チャートが必要です。提案は大歓迎です。 – bocko

答えて

1

最近のChart.JSバージョン(執筆時点では2.7.1)を使用すると、これはcanvas2svgを少し微調整して実行します。 私はcanvas2svgするには、次のコードを追加:あなたは(falseに設定)、チャートのアニメーションと応答性を無効にする場合にのみ動作します:Codepen

ctx.prototype.getContext = function (contextId) { 
    if (contextId=="2d" || contextId=="2D") { 
     return this; 
    } 
    return null; 
} 

ctx.prototype.style = function() { 
    return this.__canvas.style 
} 

ctx.prototype.getAttribute = function (name) { 
    return this[name]; 
} 

ctx.prototype.addEventListener = function(type, listener, eventListenerOptions) { 
    console.log("canvas2svg.addEventListener() not implemented.") 
} 

を見て持っていますが。

+0

ねえ、これは素晴らしいです!ありがとうございました。エクスポートにはsvgだけが必要なので、エクスポートするまではチャート(アニメーション、応答性)の通常の設定を使用し、それをfalseに設定します。 – bocko

+0

チェックアウトする価値のある別のライブラリ:http://ej2.syncfusion.com/home/(デベロッパーと$ 1M /年未満の企業が利用できるコミュニティライセンスがあります)彼らのチャートはsvgを使っているので、輸出は自然に行われます。 – bocko

関連する問題