Yes. This is no longer supported in the Google Visualization API, but it only requires a few lines of JavaScript.
The solution, originally described by Riccardo Govoni in a remarkable Battlehorse tutorial , converts SVG to Canvas and then to PNG, which can then be displayed or saved.
The tutorial code no longer works, but I added two fixes:
- Set the
chartArea variable to work with the Google visualization API version 1.32 (September 24, 2012) and later ( source ) - Use canvg.js r157 as a workaround for regression identified by nverba
.
<html> <head> <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/rgbcolor.js"></script> <script type="text/javascript" src="https://canvg.googlecode.com/svn-history/r157/trunk/canvg.js"></script> <script> 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); </script> <script type="text/javascript"> google.load("visualization", "1", {packages:["corechart"]}); google.setOnLoadCallback(drawChart); function drawChart() { </script> </head> <body> <div id="google_visualization_div"></div> <button onclick="saveAsImg(document.getElementById('google_visualization_div'));">Save as PNG Image</button> <button onclick="toImg(document.getElementById('google_visualization_div'), document.getElementById('img_div'));">Convert to image</button> <hr> <div id="img_div"> Image will be placed here </div> </body> </html>
source share