據我分析這個問題,我才知道這涉及到SVG到PNG的轉換(SVG - > Canvas - > PNG)。對於這種情況,html2canvas可能無法正常工作。
爲什麼不html2canvas適合在這種情況下:
由於Highcharts利用SVG的渲染圖形和圖表,它需要SVG轉換爲畫布,而不是HTML。 html2canvas是一個非常好的HTML到canvas轉換器,但它似乎是not designed to convert svg's或may render faulty。
在搜索Google時,我遇到了一些我認爲可能會幫助您的Canvg。所以我編碼使用它,它解決了。下面,我附,你可以使用的代碼片段,如果你想:
<html>
<head></head>
<body>
<script src="https://code.jquery.com/jquery-3.2.1.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<!--
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js">
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.svg.js"></script>
-->
<script type="text/javascript" src="http://canvg.github.io/canvg/rgbcolor.js"></script>
<script type="text/javascript" src="http://canvg.github.io/canvg/StackBlur.js"></script>
<script type="text/javascript" src="http://canvg.github.io/canvg/canvg.js"></script>
<div id="sharedOne">
<div id="container"></div>
<button class="clickGrn">
GENERATE IMAGE
</button>
</div>
<div id="img">
<img id="newimg">
</div>
<script>
Highcharts.chart('container', {
title: {
text: 'Solar Employment Growth by Sector, 2010-2016'
},
subtitle: {
text: 'Source: thesolarfoundation.com'
},
yAxis: {
title: {
text: 'Number of Employees'
}
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle'
},
plotOptions: {
series: {
pointStart: 2010
}
},
series: [{
name: 'Installation',
data: [43934, 52503, 57177, 69658, 97031, 119931, 137133, 154175]
}, {
name: 'Manufacturing',
data: [24916, 24064, 29742, 29851, 32490, 30282, 38121, 40434]
}, {
name: 'Sales & Distribution',
data: [11744, 17722, 16005, 19771, 20185, 24377, 32147, 39387]
}, {
name: 'Project Development',
data: [null, null, 7988, 12169, 15112, 22452, 34400, 34227]
}, {
name: 'Other',
data: [12908, 5948, 8105, 11248, 8989, 11816, 18274, 18111]
}]
});
/*
YOU SHALL REPLACE THE FOLLOWING CODE WITH THE CODE PROVIDED BELOW
=================================================================
$("body").on("click", ".clickGrn", function() {
alert("Calll");
html2canvas($("#sharedOne"), {
allowTaint: true,
onrendered: function (canvas) {
canvg('canvas', canvas);
var imgsrc = canvas.toDataURL("image/jpg");
console.log(imgsrc);
$("#newimg").attr('src', imgsrc);
}
});
});
*/
$("body").on("click", ".clickGrn", function() {
var canvasSharedOne = document.createElement("canvas");
var HighChartsSVG=$('#container').find('svg')[0].outerHTML;
canvg(canvasSharedOne, HighChartsSVG);
var imgsrc = canvasSharedOne.toDataURL();
document.getElementById('newimg').src = imgsrc;
});
</script>
</body>
</html>
但是,是的,我依然想使用最新版本,其中包含一個額外的html2canvas.svg.js
html2canvas,但無法弄清楚如何使用它作爲創建者從頭開始新編寫了該庫。他還指定添加SVG渲染支持。在閱讀代碼時,我認爲他已經使用FabricJS進行畫布支持。
由於它是新的,我們不能期望代碼示例,因爲它仍處於開發階段。
你檢查什麼的'VAR帆布=的document.getElementById( 'sharedOne')後'canvas'值;'? –
您的#sharedOne div不存在或不是HTML canvas元素。 –
@henriqueromao是的,我檢查畫布價值。它僅返回html –