2017-03-08 2 views
0

Ich verwende HTML2Canvas, um Screenshot meiner HTML-Seite zu erfassen und als Bild im Server zu speichern. Meine HTML enthält eine d3.js Diagramm und HTML-Elemente. d3.js Diagramm wird als Svg generiert, um Svg zu erfassen, verwende ich Fabric.js, um Svg in Canvas-Element zu konvertieren. Nachdem dieser Prozess abgeschlossen ist, verwende ich Html2Canvas, um die gesamte Webseite als Bild zu erfassen und auf dem Server zu speichern.HTML2Canvas erfasst keine Canvas-Daten in IE11

Der gesamte Prozess funktioniert gut in Chrome und FF. Problem ist bei der Verwendung von IE. In IE 11 wird alles andere auf der Seite erfasst, mit Ausnahme des Diagramm-Canvas-Elements.

Jede Hilfe zur Verfügung gestellt wird sehr geschätzt.

Screen-Capture-Code:

Funktion SaveHtmlAsImage (item, idx)

{

// ein neues Element Leinwand erstellen

var canvasId = 'canvas' + idx; 

// die SVG erhalten, die muss erfasst werden.

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

// SVG konvertieren mit 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(); 

// Ersetzen Sie das svg mit Canvas-Element auf die Leinwand.

d3.select(item).select("svg").remove(); 


    $(item).find('#ChartItem').append(d3canvas); 

// Verwenden Sie Html2Canvas, um das gesamte HTML zu erfassen, um es als Bild zu speichern.

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

}); 

}

Bitte geben Sie Ihre Vorschläge, dieses Problem zu beheben.

+0

IE Kaiido

+0

@Kaiido: Danke für die schnelle Antwort. Ich habe canvg.js ausprobiert, bevor ich zu Fabric.js gegangen bin, aber mein Svg ist ein komplexes [Radardiagramm/Blasendiagramm]. Bei der Konvertierung von "svg to canvas" wird ein Fehler ausgegeben, wenn "canvg.js" verwendet wird. Unten ist der Fehler, den ich bekomme, wenn ich canvg benutze. Fehler: Objekt unterstützt keine Eigenschaft oder Methode 'getContext' Datei: canvg.js – GokuSS3

+0

Dieser Fehler bedeutet, dass Sie kein Canvas-Element als Parameter von 'canvg (canvasElement, svgString) bereitgestellt haben' – Kaiido

Antwort

0

Ich fand die Ursache für dieses Problem ein anderes SVG-Symbol, das in das Diagramm eingebettet wurde. Ersetzen Sie das SVG-Symbol durch PNG-Bild dieses Problem behoben.

Entschuldigung für die Unannehmlichkeiten. Hoffe es hilft jemandem in Zukunft.