Highchart和HTMLCanvas

时间:2014-11-06 08:07:35

标签: highcharts extjs4 html2canvas

我在extjs面板组件中放置了多个图表(highcharts)。 我想将div中的所有图表和extjs组件下载为图像。 我使用了html canvas,它只下载了extjs组件。图像中未捕获高图组件。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

Agi La我不知道extjs,但由于我在下载highcharts图表时遇到了问题,我会解释我为了得到它们所做的一切。

首先,确保您拥有 rgbcolor.js canvg.js 库。

其次,您可以使用此脚本进行AJAX调用:

<script>
        $( document ).ready(function(){
            var svg = document.getElementById('$this->id_chart').children[0].innerHTML;
            canvg(document.getElementById('$this->id_canvas'),svg);
            var img = $this->id_canvas.toDataURL('image/png'); //img is data:image/png;base64
            img = img.replace('data:image/png;base64,', '');
            $.ajax({
              type: 'POST',
              url: 'AJAX/AJAX1.php', 
              data: {INFO1: img , INFO2: '$this->file_name_export' }                   
            });
        });
</script>

<script type='text/javascript' src='JS/rgbcolor.js'></script>    
<script type='text/javascript' src='JS/canvg.js'></script>

<!-- canvas tag to convert SVG -->
<canvas id='$this->id_canvas' style='display:none;'></canvas>

其中$ this-&gt; id_chart是您放置高图的div的ID,$ this-&gt; file_name_export是您要为已保存的图表指定的名称。

在您的Ajax文件中,您必须拥有:

$img        = $_POST['INFO1'];
$fileName   = $_POST['INFO2']. '.jpeg';

$data = str_replace(' ', '+', $img);
$data = base64_decode($data);
$im = imagecreatefromstring($data);

if ($im !== false) {
    // Save image in the specified location
    imagejpeg($im, "../temp/" .$fileName,100);
    imagedestroy($im);               
}    

您可以看到here原始来源,它在按钮中使用此代码,而不是像我一样自动下载。