- PVSM.RU - https://www.pvsm.ru -

Используем highcharts.js для создания графиков на стороне сервера

highcharts-on-a-server
Сегодня мы поговорим об использовании highcharts.js [1] графиков на стороне сервера. Весь код будем писать на С#, обойдемся совсем без javascript. В результате получим файл с графиком, который можно будет сохранить на диск или например приложить к письму.

Беглый поиск хороших бесплатных .net библиотек для создания графиков не увенчался успехом. Лучшей из всех найденных библиотек была ms-chart [2], но судя по отсутствию обновлений и хорошей документации сама Microsoft ее давно забросила.

Выбор пал на highcharts.js — очень гибкая библиотека для построения графиков, которая широко применяется на фронтенде.

Ее возможности значительно превосходят все те библиотеки которые есть для .net. Существует два варианта использования highcharts.js на сервере:

  • использовать phantom.js и обращаться к библиотеке через него
  • использовать highchart-export-module [3]

Был выбран второй вариант, так как phantom.js не возможно запустить в Azure Web App (proof [4]). Для работы с highchart-export-module необходимо поднять свой сервер (см. официальное руководство [5] или вот этот блог [6]), но если делать это лень можно использовать сервер highchart.js (http://export.highcharts.com/ [7]).

У highchart-export-module довольно простой HTTP API. Для того чтобы общаться с ним из .net была написана небольшая библиотека highcharts-export-client. Давайте рассмотрим ее поближе.

highcharts-export-client

Как и большинство .net библиотек, установим ее из NuGet.

Install-Package highcharts-export-client

Для создания графика, используем следующий код:

    var client = new HighchartsClient("http://export.highcharts.com/");

    var options = new
    {
        xAxis = new
        {
            categories = new[] { "Jan", "Feb", "Mar" }
        },
        series = new[]
        {
            new { data = new[] {29.9, 71.5, 106.4} }
        }
    };

    var res = await client.GetChartImageFromOptionsAsync(JsonConvert.SerializeObject(options));

    File.WriteAllBytes("image.png", res);

Результат работы кода, представлен на изображении ниже.

Basic chart

Данные для графика можно передавать в виде настроек highcharts. Это удобно если вы используете highcharts на фронтенде, достаточно скопировать настройки и вы получите точно такой же график на стороне сервера.

    await client.GetChartImageFromOptionsAsync(your_highcharts_settings);

Также данные можно передавать в svg формате.

    await client.GetChartImageFromSvgAsync(svg);

Качество и формат результирующего файла можно настроить передав в конструктор объект HighchartsSetting.

    var settings = new HighchartsSetting
    {
        ExportImageType = "jpg",         
        ImageWidth = 1500,
        ServerAddress = "http://export.highcharts.com/"
    };

    var client = new HighchartsClient(settings);

Поддерживаются форматы png, jpg, pdf и svg. Максимальное разрешение файла 2000px — это ограничение накладывает highchart-export-module.

Исходный код библиотеки доступен на Github — highcharts-export-client [8].

Спасибо за внимание!

Автор: sochix

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/c-2/115323

Ссылки в тексте:

[1] highcharts.js: http://www.highcharts.com/

[2] ms-chart: https://code.msdn.microsoft.com/Samples-Environments-for-b01e9c61

[3] highchart-export-module: http://www.highcharts.com/docs/export-module/export-module-overview

[4] proof: http://stackoverflow.com/questions/22965791/phantomjs-renders-black-boxes-on-azure-websites/23000040#23000040

[5] официальное руководство: http://www.highcharts.com/docs/export-module/setting-up-the-server

[6] вот этот блог: http://withr.me/set-up-highcharts-export-server-on-ubuntu-server-12-dot-04-step-by-step/

[7] http://export.highcharts.com/: http://export.highcharts.com/

[8] highcharts-export-client: https://github.com/sochix/highcharts-export-client

[9] Источник: https://habrahabr.ru/post/279515/