Quantcast
Channel: Notes on Science
Viewing all articles
Browse latest Browse all 14

HTML5 : display and print out converted to

$
0
0

HTML5のcanvasを印刷する方法

canvasタグによる描画に対応しているブラウザであっても、印刷してみると空白になってしまう場合が多い。また、PDFに変換したい場合なども、同様にcanvasが上手く表示されないことがある。

canvasを扱うJavascriptにはtoDataURL()メソッドというものが用意されていて、canvasタグに描画したイメージをPNGかJPEG画像に変換してimgタグに渡すことができる。

まず、普通にcanvasを使うと下記のようになる。

canvas test

<canvas id="canvas_area1" width="100" height="100">canvas test</canvas>

var canvas = document.getElementById('canvas_area1');
var ctx = canvas.getContext('2d');
ctx.strokeRect(25, 25, 50, 50);


このcanvasでの描画が印刷されなくて困るという話なので、toDataURL()メソッドを使って画像として表示させてみる。
下記2つの図形は、上がcanvasタグによる描画で、下がそれをPNG画像に変換してimgタグで表示したものだ。透過処理が効くのでJPEGよりもPNGがおすすめ。
図形を右クリックしてみると、コンテキストメニューが異なるので分かるだろう。

canvas test

<canvas id="canvas_area2" width="100" height="100">canvas test</canvas>
<img src="" width="100" height="100" id="image2" />

var canvas = document.getElementById('canvas_area2');
var ctx = canvas.getContext('2d');
ctx.strokeRect(25, 25, 50, 50);
var img_png_src = canvas.toDataURL();
document.getElementById("image2").src = img_png_src;


ただし、これだと同じ図形が2個表示されてしまうので、canvasタグは表示しないようにstyle="visibility:hidden;"を設定する。
下記のようにimgタグによる図形のみ表示される。
このページを全選択してみると分かるが、表示されていないcanvasタグも領域だけは確保されているので、配置によってはレイアウトが崩れるかも知れない。


<img src="" width="100" height="100" id="image3" /><canvas id="canvas_area3" width="100" height="100" style="visibility:hidden;">canvas test</canvas>

var canvas = document.getElementById('canvas_area3');
var ctx = canvas.getContext('2d');
ctx.strokeRect(25, 25, 50, 50);
var img_png_src = canvas.toDataURL();
document.getElementById("image3").src = img_png_src;


JPEGに変換する場合は下記のようになるが、透過できないので、色指定などを何もしないとキャンバスが真っ黒になってしまう。


<img src="" width="100" height="100" id="image4" /><canvas id="canvas_area3" width="100" height="100" style="visibility:hidden;">canvas test</canvas>

var canvas = document.getElementById('canvas_area3');
var ctx = canvas.getContext('2d');
ctx.strokeRect(25, 25, 50, 50);
var img_jpg_src = canvas.toDataURL("image/jpeg");
document.getElementById("image4").src = img_jpg_src;


Viewing all articles
Browse latest Browse all 14