HTML2Canvas 내 HTML 페이지의 스크린 샷을 캡처하여 서버에 이미지로 저장합니다. 내 Html에는 d3.js 차트 및 html 요소가 포함되어 있습니다. d3.js 차트가 svg로 생성되므로 svg를 캡처하려면 Fabric.js을 사용하여 svg를 canvas 요소로 변환하십시오. 이 프로세스가 완료되면 Html2Canvas를 사용하여 이미지로 전체 웹 페이지를 캡처하고 서버에 저장합니다.HTML2Canvas가 IE11에서 캔버스 데이터를 캡처하지 않습니다.
전체 프로세스가 Chrome 및 FF에서 잘 작동합니다. 문제는 IE를 사용할 때입니다. IE 11에서는 차트 캔버스 요소를 제외하고 페이지의 다른 모든 요소가 캡처됩니다.
제공된 도움을 주시면 감사하겠습니다.
화면 캡처 코드 :
기능 SaveHtmlAsImage (항목, IDX)
{
// // SVG를 가져옵니다 새로운 캔버스 요소
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.loadSVGFromString(svg.node().parentNode.innerHTML, function (objects, options)
Fabric.js
사용하여 캔버스하기 위해 SVG로 변환 {var canvasObj = new fabric.Canvas(canvasId);
var obj = fabric.util.groupSVGElements(objects, options);
canvasObj.add(obj).renderAll();
// 캔버스 요소와 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는 복잡한 하나의 [Radar chart/bubble chart]입니다. canvg.js를 사용할 때 svg에서 캔버스로 변환 할 때 오류가 발생합니다. 아래 canvg를 사용하면 오류가 발생합니다. 오류 : 개체가 'getContext'속성 또는 속성을 지원하지 않습니다. 파일 : canvg.js – GokuSS3
이 오류는 사용자가 canvg 요소를 canvg (canvasElement, svgString)의 매개 변수로 제공하지 않았 음을 의미합니다. – Kaiido