Node.js + d3 + jsdomを使用し、サーバー側でsvgを生成

Node.jsとd3を使用して、サーバーサイドでsvgを作成してみます。

環境は
Node.js:v8.11.1
d3:5.0.0
jsdom:11.7.0


モジュールのインストール



d3本体と、仮想domを提供してくれるjsdomをインストールします。


$ npm install d3
$ npm install jsdom



[email protected]
[email protected]
がそれぞれインストールできました。



サンプル



こちらを参考にしたのですが動作せず。
サーバ側でd3を使って作ったsvgを画像に変換して返す

どうやら、jsdomの仕様が変わったようです。
D3.js + jsdomでSVGファイルを作成 & pngに変換

jsdomオリジナルのドキュメントも参考にしながらプログラムを記載してみます。
https://github.com/jsdom/jsdom


・sample.js


  1. const d3 = require('d3')
  2. const { JSDOM } = require('jsdom')
  3. const document = new JSDOM().window.document
  4. const body = d3.select(document.body)
  5. .append('svg')
  6. .attr('width', 300)
  7. .attr('height', 300)
  8. .append('circle')
  9. .attr('cx', 150)
  10. .attr('cy', 150)
  11. .attr('r', 100)
  12. .attr('fill', '#ff0000')
  13. console.log(document.body.innerHTML)




実行結果をファイルにリダイレクト


$ node sample.js > output.svg




こんな感じのsvgファイルが出力できました。


  1. <svg width="300" height="300"><circle cx="150" cy="150" r="100" fill="#ff0000"></circle></svg>



831_01.png


【参考URL】

サーバ側でd3を使って作ったsvgを画像に変換して返す
D3.js + jsdomでSVGファイルを作成 & pngに変換
https://github.com/jsdom/jsdom


関連記事

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ