Рендеринг Highcharts холст в виде PNG на странице - PullRequest
21 голосов
/ 25 января 2012

Я использую библиотеку HighCharts для генерации некоторых динамических диаграмм.Однако я хотел бы отобразить элемент холста HighCharts в виде изображения в формате PNG, чтобы пользователь мог скопировать и вставить диаграмму в электронное письмо и т. Д. Без использования функции экспорта.

В частности, япытаюсь создать шаблон электронной почты в формате HTML, включающий диаграмму, и хочу, чтобы пользователь мог выбрать все> копировать / вставить в свой почтовый клиент вместо копирования / вставки, экспортировать изображение, а затем найти способ вставить его вадрес электронной почты.

Я нашел это: Захват HTML-холста в формате gif / jpg / png / pdf? , но, похоже, код не отображает изображение в документе.

Ответы [ 4 ]

27 голосов
/ 25 января 2012

Вот хак , если ваше сердце настроено на использование HighCharts. Он использует canvg для анализа SVG в канве и затем преобразует холст в PNG.

chart = new Highcharts.Chart({
    
    chart: {
        renderTo: 'container'
    },
    
    title: {
        text: ''
    },
    
    xAxis: {
        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    },
    
    series: [{
        data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]        
    }],
    
    navigation: {
        buttonOptions: {
            align: 'center'
        }
    }
});

canvg(document.getElementById('canvas'), chart.getSVG())
    
var canvas = document.getElementById("canvas");
var img = canvas.toDataURL("image/png");

document.write('<img src="'+img+'"/>');
11 голосов
/ 07 февраля 2013

Я знаю, что это старый вопрос, но, поскольку он оказался для меня # 1 в результатах поиска Google, я думаю, стоит упомянуть, что Highcharts теперь изначально поддерживает серверный скрипт генерации изображений и это прекрасно работает.

8 голосов
/ 31 июля 2014

Имея информацию из " Рендеринга диаграмм на сервере " (из jkraybills answer ), я создал этот минимальный пример, используя Ajax, чтобы получить изображение диаграммы, которая не был обработан и отображается в виде img.

HTML:

<img id="chart" style="width: 600px;" />

Javascript:

// Regular chart options
var options = {
    title: {
        text: 'My chart'
    }
    ...
}

//URL to Highcharts export server
var exportUrl = 'http://export.highcharts.com/';

//POST parameter for Highcharts export server
var object = {
    options: JSON.stringify(options),
    type: 'image/png',
    async: true
};

//Ajax request
$.ajax({
    type: 'post',
    url: exportUrl,
    data: object,
    success: function (data) {
        // Update "src" attribute with received image URL
        $('#chart').attr('src', exportUrl + data);
    }
});

Как и в этой демонстрации JSFiddle .

Остальная часть параметра POST (width, callback ...) в документации .

6 голосов
/ 02 декабря 2013

Вот решение на стороне сервера, основанное на PhantomJS. Вы можете использовать JSONP для выполнения кросс-доменного вызова image.vida.io.

http://image.vida.io/

Ваш график / визуализация должны быть доступны извне. Вы можете передать учетные данные на URL.

http://image.vida.io/api/https%3A%2F%2Fvida.io%2Fdocuments%2FWgBMc4zDWF7YpqXGR/viewport_width=980&viewport_height=900&delay=5000&selector=%23canvas

Затем вы можете отобразить изображение с тегом img:

<img src="data:image/png;base64, [base64 data]"/>

Работает в браузере.

...