2017-03-08 8 views
0

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 }); 

}); 

}

이 문제를 해결하기 위해 제안을 주시기 바랍니다.

+0

IE Kaiido

+0

@Kaiido : 빠른 답장을 보내 주셔서 감사합니다. 나는 Fabric.js에 가기 전에 canvg.js를 시도했지만 나의 SVG는 복잡한 하나의 [Radar chart/bubble chart]입니다. canvg.js를 사용할 때 svg에서 캔버스로 변환 할 때 오류가 발생합니다. 아래 canvg를 사용하면 오류가 발생합니다. 오류 : 개체가 'getContext'속성 또는 속성을 지원하지 않습니다. 파일 : canvg.js – GokuSS3

+0

이 오류는 사용자가 canvg 요소를 canvg (canvasElement, svgString)의 매개 변수로 제공하지 않았 음을 의미합니다. – Kaiido

답변

0

이 문제의 근본 원인이 차트에 포함 된 다른 svg 아이콘 인 것으로 나타났습니다. svg 아이콘을 png 이미지로 바꾸면이 문제가 해결되었습니다.

불편을 끼쳐 드려 죄송합니다. 앞으로 도움이되기를 바랍니다.

관련 문제