Exporting Charts as SVG

Charts can be exported as SVG by using the SVGGenerator class. This allows you to generate an SVG string of any chart, using a Configuration object with the chart’s data.

Installing

Add the vaadin-charts-flow-svg-generator dependency to your project’s pom.xml as follows:

<dependency>
    <groupId>com.vaadin</groupId>
    <artifactId>vaadin-charts-flow-svg-generator</artifactId>
</dependency>
Note
Node.js required
Node.js must be installed for the generator to work. Please see the installation instructions in Installing Node.js.

Using the Generator

Create an instance of SVGGenerator and call the generate() method, passing the chart’s Configuration as an argument. The method returns a string with the SVG data of the chart.

Warning
Close the generator
Remember to close the generator when you’re done using it. It is recommended to use a try-with-resources block, so the generator is automatically closed.
Configuration configuration = new Configuration();
// ...
try (SVGGenerator generator = new SVGGenerator()) {
    String svg = generator.generate(configuration);
} catch (IOException | InterruptedException ex) {
    // handle exceptions accordingly
}

Customizing SVG Generation

You can customize some attributes of the resulting SVG.

The customizable options include the following:

  • Width

  • Height

  • Theme

  • Language

  • Showing timeline

  • Executing JavaScript code (formatter functions)

Any customizations are handled with the ExportOptions class.

Note
CSS styling not supported
CSS styling is not supported when exporting a chart as SVG.
Configuration configuration = new Configuration();
// ...
ExportOptions options = new ExportOptions();
options.setWidth(800);
options.setHeight(600);
try (SVGGenerator generator = new SVGGenerator()) {
    String svg = generator.generate(configuration, options);
} catch (IOException | InterruptedException ex) {
    // handle exceptions accordingly
}

Executing JavaScript Functions

You can execute functions from Configuration objects, for example, formatter functions. Executing functions must be explicitly enabled by setting the executeFunctions flag to true.

Caution
Only Run Trusted Code
Enabling this option allows JavaScript code to run on your server. Make sure to only allow safe and trusted code.
Configuration configuration = new Configuration();
configuration.getyAxis().getLabels().setFormatter("function () { return this.value +' mm'; }");
// ...
ExportOptions options = new ExportOptions();
options.setExecuteFunctions(true);
try (SVGGenerator generator = new SVGGenerator()) {
    String svg = generator.generate(configuration, options);
} catch (IOException | InterruptedException ex) {
    // handle exceptions accordingly
}

Preview SVG (For Debugging)

You can add the generated SVG to a component to see the resulting image.

Caution
For debugging purposes only
Use the Chart component to render charts. This approach is only intended to help you debug your application.
Div div = new Div();
Configuration configuration = new Configuration();
// ...
try (SVGGenerator generator = new SVGGenerator()) {
    String svg = generator.generate(configuration);
    div.getElement().setProperty("innerHTML", svg);
} catch (IOException | InterruptedException ex) {
    // handle exceptions accordingly
}
add(div);