HTML2Canvas私のHTMLページのスクリーンショットをキャプチャし、サーバにイメージとして保存します。 私のHtmlには、d3.jsというchart要素とhtml要素が含まれています。 d3.jsチャートはsvgとして生成されるので、svgをキャプチャするために、私はFabric.jsを使ってsvgをcanvas要素に変換します。このプロセスが完了したら、私はHtml2Canvasを使用してWebページ全体をイメージとしてキャプチャし、サーバーに保存します。HTML2CanvasがIE11でキャンバスデータをキャプチャしない
ChromeとFFではすべてのプロセスが正常に動作しています。問題は、IEを使用しているときです。 IE 11では、チャートのキャンバス要素を除いて、ページ内のすべてのものがキャプチャされます。
ご協力いただければ幸いです。
スクリーンキャプチャコード:
関数SaveHtmlAsImage(アイテム、IDX)
{
// // SVGを取得し、新しいcanvas要素
var canvasId = 'canvas' + idx;
を作成していますキャプチャする必要があります。
var svg = d3.select(item).select("svg");
var d3canvas = document.createElement('canvas');
d3canvas.id = canvasId;
d3canvas.width = svg.attr('width');
d3canvas.height = svg.attr('height');
// add the canvas to html body
document.body.appendChild(d3canvas);
// Fabric.js
fabric.loadSVGFromString(svg.node().parentNode.innerHTML, function (objects, options)
{
var canvasObj = new fabric.Canvas(canvasId);
var obj = fabric.util.groupSVGElements(objects, options);
canvasObj.add(obj).renderAll();
//キャンバス要素とSVGを置き換えを使用してキャンバスにSVGを変換。
d3.select(item).select("svg").remove();
$(item).find('#ChartItem').append(d3canvas);
//画像として保存するためにHTML全体をキャプチャするには、Html2Canvasを使用します。
html2canvas(item,{
onrendered: function (canvas) {
var canvasdata = canvas.toDataURL("image/bmp");
var image = canvasdata.replace(/^data:image\/png;base64,/, "");
imageDataLst.push({ key: idx, imageData: image);
}
}, { width: 1250, height: 750 });
});
}
この問題を解決するためにあなたの提案を入力してください。
IE
Kaiido
@Kaiido:迅速な返答をありがとう。 Fabric.jsに行く前にcanvg.jsを試しましたが、私のsvgは複雑なものです(レーダーチャート/バブルチャート)。 canvg.jsを使用すると、svgからキャンバスへの変換でエラーが発生します。以下はcanvgを使用すると私が得るエラーです。 エラー:オブジェクトがプロパティまたはメソッド 'getContext'をサポートしていませんファイル:canvg.js – GokuSS3
このエラーは、canvg要素をcanvg(canvasElement、svgString)のパラメータとして指定しなかったことを意味します。 – Kaiido