Я использую Highcharts Export Server в качестве модуля Node.js для создания диаграмм в формате PNG. Когда я включаю круговую диаграмму с переменным радиусом, я получаю сообщение об ошибке в результирующем файле. Ошибка Highcharts error # 17:
Запрошенный тип серии не существует.
Эта ошибка возникает, когда вы устанавливаете для chart.type или series.type тип серии, который не определен в Highcharts. Типичная причина может заключаться в том, что у вас отсутствует файл расширения, в котором определен тип серии, например, для запуска серии rangerange вам необходимо загрузить файл highcharts-more.js.
Диаграмма, которую я использую, является частью модуля highcharts-more
, поэтому ошибка имеет смысл. Я даже нашел документы, которые, казалось, излагали мое решение. Это опция resources
, где вы можете предоставить скрипты для внедрения в ваш экспорт. Эта страница здесь , но я включу важный бит ниже:
-ресурсов
{
"files": "highstock.js,highcharts-more.js,data.js,drilldown.js,funnel.js,heatmap.js,treemap.js,highcharts-3d.js,no-data-to-display.js,map.js,solid-gauge.js,broken-axis.js",
"css": "g.highcharts-series path {stroke-width:2;stroke: pink}",
"js": "document.body.style.webkitTransform = \"rotate(-10deg)\";"
}
- files: Разделенная запятыми строка имен файлов, которые необходимо вставить на страницу для рендеринга диаграммы. Внедряются только файлы с расширениями .css и .js, остальные игнорируются.
- css: css вставлено в тело страницы
- js: javascript, вставленный в тело страницы
После некоторых копаний я обнаружил, что могу передать эту опцию ресурса в виде строкового объекта JSON в мои параметры экспорта. Итак, я попытался внедрить удаленную версию highcharts-more.js
.
const exportImagesBase64 = async(data, format = 'png') => {
HighchartsExport.initPool();
let resources = JSON.stringify({
files: "http://code.highcharts.com/highcharts-more.js"
});
let charts = data.map(chart => exportPromise({
type: format, //png
options: chart, //standard highcharts config object
resources //resources option to inject highcharts-more
}));
charts = await Promise.all(charts);
HighchartsExport.killPool();
return charts;
};
const exportPromise = (data) => {
return new Promise((resolve, reject) => {
HighchartsExport.export(data, (err, res) => err ? reject(err) : resolve(res));
});
};
Вот пример того, что data
может быть равно в коде выше
[{
"chart": {
"plotBackgroundColor": null,
"plotBorderWidth": null,
"plotShadow": false,
"type": "variablepie",
"height": 300,
"width": 300
},
"title": {
"text": "Placement Breakdown",
"align": "left",
"x": 30,
"y": 30
},
"tooltip": {
"headerFormat": "",
"pointFormat": "<b> {point.name}</b><br/>Impressions: <b>{point.y}</b><br/>Clicks: <b>{point.z}</b><br/>"
},
"plotOptions": {
"pie": {
"allowPointSelect": true,
"cursor": "pointer",
"dataLabels": {
"enabled": false
},
"showInLegend": true
}
},
"series": [
{
"minPointSize": 10,
"innerSize": "20%",
"zMin": 0,
"data": [
{
"name": "facebook",
"y": 13642,
"z": 357
},
{
"name": "instagram",
"y": 12920,
"z": 326
}
]
}
],
"credits": {
"enabled": false
}
}]
После добавления параметров ресурса я все еще получаю ошибку # 17 Highcharts. Я думаю об этом совершенно неправильно? Я не могу найти больше информации об этом, поэтому надеюсь, что у кого-то есть какие-то знания, которыми можно поделиться.