You can try this

 var chart = $('#yourchart').highcharts();
    svg = chart.getSVG();   
    var base_image = new Image();
    svg = "data:image/svg+xml,"+svg;
    base_image.src = svg;
    $('#mock').attr('src', svg);

Take html of Mock and send to DB or save only the binary code .

Save highchart as binary image


I haven't done that before, but I believe you want to play with the index.php file located in the exporting-server folder. By default Highcharts provides (for free) a web service but you can modify that and create your own web service for exporting, or do whatever you want with the chart. Look at these instructions which can be found here Export module:

"If you want to set up this web service on your own server, the index.php file that handles the POST is supplied in the download package inside the /exporting-server directory.

  1. Make sure that PHP and Java is installed on your server.
  2. Upload the index.php file from the /exporting-server directory in the download package to your server.
  3. In your FTP program, create directory called temp in the same directory as index.php and chmod this new directory to 777 (Linux/Unix servers only).
  4. Download Batik from Find the binary distribution for your version of jre
  5. Upload batik-rasterizer.jar and the entire lib directory to a location on your web server. In the options in the top of the index.php file, set the path to batik-rasterier.jar.
  6. In your chart options, set the exporting.url option to match your PHP file location. "


I just implement this using Nobita's method. I was creating a survey that showed the user's results in a chart, uploaded the image to my server and then sent out an email with the image in it. Here's a few things to note.

I had to make a few updates to the highcharts/exporting-server/index.php file which are the following:

I changed the directory from "temp" to something else and just note that it is in 4 different locations.

I had to change shell_exec() adding "-XX:MaxHeapSize=256m" because it was giving me an error:

$output = shell_exec("java -XX:MaxHeapSize=256m -jar ". BATIK_PATH ." $typeString -d $outfile $width /mypathhere/results/$tempName.svg");

If you want it to download that image you can leave the following alone:

header("Content-Disposition: attachment; filename=$filename.$ext");
header("Content-Type: $type");
echo file_get_contents($outfile);

But, I changed this because I wanted to send back the path to the image, so I deleted the above and replace this with the image path (Note that I'm just using the temporary name.):

echo "/mypathhere/results/$tempName.$ext";

Also, this file is deleting the svg file and also the new file you made. You need to remove the code that deletes the file:


And you can also delete the line before it if you want to keep the svg file.

Make sure to include highcharts/js/modules/exporting.js

Then, in your JS you can do something like the following:

var chart = new Highcharts.Chart();    
var imageURL = '';
var svg = chart.getSVG();
var dataString = 'type=image/jpeg&filename=results&width=500&svg='+svg;
    type: 'POST',
    data: dataString,
    url: '/src/js/highcharts/exporting-server/',
    async: false,
    success: function(data){
        imageURL = data;

The URL you are posting to is the new version of the /exporting-server/index.php. Then, you can use the imageURL however you like.


It could be done really easy with PhantomJS. You can render Highchart chart and save it to SVG, PNG, JPEG or PDF. The example below renders a demo Highcharts diagram to SVG and PDF at the same time:

var system = require('system');
var page = require('webpage').create();
var fs = require('fs');

// load JS libraries

// chart demo
var args = {
    width: 600,
    height: 500

var svg = page.evaluate(function(opt){
    $('body').prepend('<div id="container"></div>');

    var chart = new Highcharts.Chart({
        chart: {
            renderTo: 'container',
            width: opt.width,
            height: opt.height
        exporting: {
            enabled: false
        title: {
            text: 'Combination chart'
        xAxis: {
            categories: ['Apples', 'Oranges', 'Pears', 'Bananas', 'Plums']
        yAxis: {
            title: {
                text: 'Y-values'
        labels: {
            items: [{
                html: 'Total fruit consumption',
                style: {
                    left: '40px',
                    top: '8px',
                    color: 'black'
        plotOptions: {
            line: {
                dataLabels: {
                    enabled: true
                enableMouseTracking: false
            series: {
                enableMouseTracking: false, 
                shadow: false, 
                animation: false
        series: [{
            type: 'column',
            name: 'Andrii',
            data: [3, 2, 1, 3, 4]
        }, {
            type: 'column',
            name: 'Fabian',
            data: [2, 3, 5, 7, 6]
        }, {
            type: 'column',
            name: 'Joan',
            data: [4, 3, 3, 9, 0]
        }, {
            type: 'spline',
            name: 'Average',
            data: [3, 2.67, 3, 6.33, 3.33],
            marker: {
                lineWidth: 2,
                lineColor: 'white'
        }, {
            type: 'pie',
            name: 'Total consumption',
            data: [{
                name: 'Andrii',
                y: 13,
                color: '#4572A7'
            }, {
                name: 'Fabian',
                y: 23,
                color: '#AA4643'
            }, {
                name: 'Joan',
                y: 19,
                color: '#89A54E'
            center: [100, 80],
            size: 100,
            showInLegend: false,
            dataLabels: {
                enabled: false

    return chart.getSVG();
},  args);

// Saving SVG to a file
fs.write("demo.svg", svg);
// Saving diagram as PDF


If you save the code as demo.js, then just run bin/phantomjs demo.js to generate demo.svg and demo.pdf

Related Query

More Query from same tag