Google グラフの出力を画像として保存しようとしていますが、次のエラーが発生し続けます。
キャッチされていない TypeError: null のプロパティ 'firstChild' を読み取れません
これがJavaScriptです:
// Load the Visualization API and the piechart package.
google.load('visualization', '1.0', {'packages':['corechart']});
// Set a callback to run when the Google Visualization API is loaded.
google.setOnLoadCallback(drawChart);
// Callback that creates and populates a data table,
// instantiates the pie chart, passes in the data and
// draws it.
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Date', 'Impressions', 'Clicks']
<?
while ($arrDate = mysql_fetch_assoc($resStats)) {
$arrDates[] = $arrDate;
echo ",['".$arrDate["fdate"]."', ".($arrDate["imps"] ? $arrDate["imps"] : 0).", ".($arrDate["clicks"] ? $arrDate["clicks"] : 0)."]";
}
?>
]);
var options = {
series: {
0: {targetAxisIndex: 0},
1: {targetAxisIndex: 1}
},
vAxes:{
0: {title: 'Impressions', minValue: 0},
1: {title: 'Clicks', minValue: 0}
}
};
var chart = new google.visualization.LineChart(document.getElementById('chartContainer'));
chart.draw(data, options);
}
function getImgData(chartContainer) {
var chartArea = chartContainer.getElementsByTagName('svg')[0].parentNode;
var svg = chartArea.innerHTML;
var doc = chartContainer.ownerDocument;
var canvas = doc.createElement('canvas');
canvas.setAttribute('width', chartArea.offsetWidth);
canvas.setAttribute('height', chartArea.offsetHeight);
canvas.setAttribute(
'style',
'position: absolute; ' +
'top: ' + (-chartArea.offsetHeight * 2) + 'px;' +
'left: ' + (-chartArea.offsetWidth * 2) + 'px;');
doc.body.appendChild(canvas);
canvg(canvas, svg);
var imgData = canvas.toDataURL("image/png");
canvas.parentNode.removeChild(canvas);
return imgData;
}
function saveAsImg(chartContainer) {
var imgData = getImgData(chartContainer);
// Replacing the mime-type will force the browser to trigger a download
// rather than displaying the image in the browser window.
window.location = imgData.replace("image/png", "image/octet-stream");
}
function toImg(chartContainer, imgContainer) {
var doc = chartContainer.ownerDocument;
var img = doc.createElement('img');
img.src = getImgData(chartContainer);
while (imgContainer.firstChild) {
imgContainer.removeChild(imgContainer.firstChild);
}
imgContainer.appendChild(img);
}
そこにあるPHPのビットは、次のように出力されます。
['Date', 'Impressions', 'Clicks'],
['Aug 24, 2012', 2, 0],['Aug 27, 2012', 3, 0],['Aug 28, 2012', 37, 0],['Aug 29, 2012', 17, 0]
必要なボタンと div は次のとおりです。
<button onclick="toImg(document.getElementById('chartContainer'), document.getElementById('img_div'));">Convert to image</button>
<div id="line_div"></div>
これ: http://jsfiddle.net/SCjm8/157/は、私が従おうとしているが行き詰まったチュートリアルです。コードのボタンをクリックすると、画像が生成され、Divに配置されるようにする方法を教えてください。
どうもありがとう