node-highcharts-exporter
A basic Node.js Highcharts export module for converting the SVG sent by Highcharts's export module into svg
(i.e. unaltered), jpeg
, png
, or pdf
.
Usage
In your node app file:
// Assume this is executed inside the POST handler for a server// running on http://localhost:3000/exportvar nhe = ;nhe;
In your client-side Highcharts code:
// some chart options exporting: url: 'http://localhost:3000/export' // more chart options;
Demo
Start a server:
$ cd example; // The example directory inside this module
$ npm install; // Installs demo dependencies
$ node server.js; // Start the demo server listening on 'http://localhost:3000'
Now open example/demo.html
in the browser and export the demo chart to any format.
Installation
One of its dependencies is netpbm utilities for conversion to jpeg
. As described by node-netpbm, this needs some minor setup outside of npm
and node. At this juncture, node-netpbm
works on most *nix and OSX OSes, but no guarantees are made for Windows. It's not the end of the game, however, if you're running this on Windows and it doesn't work if your use case can do without jpeg
exporting as it should work with png
and pdf
still. On OSX, a simple brew install netpbm
takes care of the installation. After that, you can proceed to:
$ npm install -g node-highcharts-exporter
Methods
- exportChart(exportRequest, callback):
exportRequest
is the requestPOST
ed by Highcharts as described here.callback
is a function with two parameterserror
andexportedChartInfo
as below:
// error object message : 'Some error' // exportedChartInfo object fileName : 'myChart' // The name of the chart file : 'myChart.png' // The name of the chart plus its extension type : 'png' // The type of file (png,svg,pdf,jpeg) parentDir : 'path/to/processingDir/exportRequestHash' // The directory where the file has been stored filePath : 'path/to/processingDir/exportRequestHash/myChart.png' // Absolute path to exported chart
- config.set(configPropertyName, configPropertyValue) and config.get(): Setter and getter for config object. The getter returns the entire config object. At the moment, the config object is simply:
processingDir : 'defaults/to/directory/of/this/module' // If doesn't exist, will be created.
Limitations
- Handles only
SVG
, notJSON
for rendering server-side like other solutions out there. - Does exporting a quick and dirty way by converting everything that is not
SVG
toPNG
first then toPDF
orJPEG
.
To-dos
- Handle chart sizes neatly to fit into PDF (if too big at the moment they'll get truncated)
- Make an
exportChartSync
(if there is interest. It's hard with dependencies only having async methods themselves) - Enable a logging scheme (?)
- Investigate JSON-based server-side rendering as an option