Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert/save d3.js graph to pdf/jpeg

I'm working on a client-side/javascript function to save or convert an existing D3-SVG graph into a file. I've searched a lot and found some recommendations, mainly using canvas.toDataURL().

I have no <canvas> in my page, and instead using:d3.select("body").append("svg").... I've also tried to append the SVG to the <canvas> but nothing happens.

Could you please help me to resolve this exception:

Uncaught TypeError: Object #<SVGSVGElement> has no method 'toDataURL'  

Thank you

like image 749
Moein Avatar asked Apr 17 '13 00:04

Moein


2 Answers

To display your svg within a canvas, you first have to convert it using a parser/renderer utility such as http://code.google.com/p/canvg/

(code adapted from: Convert SVG to image (JPEG, PNG, etc.) in the browser, not tested)

// the canvg call that takes the svg xml and converts it to a canvas canvg('canvas', $("#my-svg").html());  // the canvas calls to output a png var canvas = document.getElementById("canvas"); var img = canvas.toDataURL("image/png"); 
like image 198
widged Avatar answered Oct 26 '22 03:10

widged


Just a heads up that I turned this concept into a small JavaScript library: https://github.com/krunkosaurus/simg

It simply converts any SVG to an image to swap out or trigger a download. Idea taken from here: http://techslides.com/save-svg-as-an-image/

like image 43
Mauvis Ledford Avatar answered Oct 26 '22 05:10

Mauvis Ledford