Your search did not match any results.

Export and Printing API

You can use two approaches to print and export the Chart: call methods, or add a built-in button with drop-down options. The supported export formats are PNG, PDF, JPEG, SVG, and GIF.

Use Methods to Export and Print Chart

Use the exportTo(fileName, format) and print() methods to export and print the Chart. In this demo, two buttons below the chart implement the print and export functionality. A click on the "Print" button calls the Print dialog window, and a click on the "Export" button saves a file with the component to your local storage. You can specify the file name and format in the exportTo(fileName, format) method.

Export and Print Chart with a Built-in Menu

To automatically create a button with export and print options, use the export object and set its enabled property to true. If you want to disable printing, set the printingEnabled property to false.

Set the formats property to specify an array of available export formats. The fileName property allows you to specify the name of the exported file.

You can see how this approach works in the following demo: JSON Data.

Handle Export Events

Use the following events to handle export:
Backend API
Copy to CodeSandBox
import React from 'react'; import Chart, { Series, Legend, Tooltip, ArgumentAxis, Label, ValueAxis, VisualRange, } from 'devextreme-react/chart'; import Button from 'devextreme-react/button'; import { mountains } from './data.js'; class App extends React.Component { constructor(props) { super(props); this.chartRef = React.createRef(); this.printChart = this.printChart.bind(this); this.exportChart = this.exportChart.bind(this); } render() { return ( <React.Fragment> <Chart id="chart" ref={this.chartRef} dataSource={mountains} title="The Highest Mountains" > <Series argumentField="name" valueField="height" type="bar" color="#E55253" /> <ArgumentAxis visible={true} /> <ValueAxis> <VisualRange startValue={8000} /> <Label customizeText={customizeLabelText} /> </ValueAxis> <Tooltip enabled={true} customizeTooltip={customizeTooltipText} /> <Legend visible={false} /> </Chart> <div id="buttonGroup"> <Button icon="print" text="Print" onClick={this.printChart} /> &nbsp; <Button icon="export" text="Export" onClick={this.exportChart} /> </div> </React.Fragment> ); } get chart() { return this.chartRef.current.instance; } printChart() { this.chart.print(); } exportChart() { this.chart.exportTo('Example', 'png'); } } function customizeTooltipText(pointInfo) { return { text: `<span class='title'>${pointInfo.argumentText }</span><br />&nbsp;<br />System: ${ }<br />Height: ${pointInfo.valueText} m`, }; } function customizeLabelText({ value }) { return `${value} m`; } export default App;
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.js'; ReactDOM.render( <App />, document.getElementById('app'), );
<!DOCTYPE html> <html> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link rel="stylesheet" type="text/css" href="" /> <link rel="stylesheet" type="text/css" href="" /> <link rel="stylesheet" type="text/css" href="styles.css" /> <script src=""></script> <script src=""></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import("./index.js"); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"></div> </div> </body> </html>
#chart { height: 440px; margin-bottom: 30px; } #buttonGroup { text-align: center; margin-bottom: 20px; } #buttonGroup > .dx-button { margin: 0 20px; } .title { font-size: 15px; font-weight: 500; }
export const mountains = [{ name: 'Everest', height: 8848, system: 'Mahalangur Himalaya', }, { name: 'Godwin Austen', height: 8611, system: 'Baltoro Karakoram', }, { name: 'Kangchenjunga', height: 8586, system: 'Kangchenjunga Himalaya', }, { name: 'Lhotse', height: 8516, system: 'Mahalangur Himalaya', }, { name: 'Makalu', height: 8485, system: 'Mahalangur Himalaya', }, { name: 'Cho Oyu', height: 8188, system: 'Mahalangur Himalaya', }];
window.config = { transpiler: 'plugin-babel', meta: { 'devextreme/localization.js': { 'esModule': true, }, }, paths: { 'npm:': '', }, defaultExtension: 'js', map: { 'react': 'npm:react@17.0.2/umd/react.development.js', 'react-dom': 'npm:react-dom@17.0.2/umd/react-dom.development.js', 'prop-types': 'npm:prop-types@15.8.1/prop-types.js', 'rrule': 'npm:rrule@2.6.6/dist/es5/rrule.js', 'luxon': 'npm:luxon@1.28.0/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign@1.1.0', 'devextreme': 'npm:devextreme@21.2.5/cjs', 'devextreme-react': 'npm:devextreme-react@21.2.5', 'jszip': 'npm:jszip@3.7.1/dist/jszip.min.js', 'devextreme-quill': 'npm:devextreme-quill@1.5.11/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.1.45/dist/dx-diagram.js', 'devexpress-gantt': 'npm:devexpress-gantt@4.0.3/dist/dx-gantt.js', '@devextreme/runtime': 'npm:@devextreme/runtime@2.3.14', 'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js', 'inferno-compat': 'npm:inferno-compat@7.4.11/dist/inferno-compat.min.js', 'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js', 'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js', 'inferno-hydrate': 'npm:inferno-hydrate@7.4.11/dist/inferno-hydrate.min.js', 'inferno-clone-vnode': 'npm:inferno-clone-vnode@7.4.11/dist/inferno-clone-vnode.min.js', 'inferno-create-class': 'npm:inferno-create-class@7.4.11/dist/inferno-create-class.min.js', 'inferno-extras': 'npm:inferno-extras@7.4.11/dist/inferno-extras.min.js', // SystemJS plugins 'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js', }, packages: { 'devextreme': { defaultExtension: 'js', }, 'devextreme-react': { main: 'index.js', }, 'devextreme/events/utils': { main: 'index', }, 'devextreme/events': { main: 'index', }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js', }, }, packageConfigPaths: [ 'npm:@devextreme/*/package.json', 'npm:@devextreme/runtime@2.3.14/inferno/package.json', ], babelOptions: { sourceMaps: false, stage0: true, react: true, }, }; System.config(window.config);