How to: Export a Chart to PDF
- 4 minutes to read
The following example exports a chart to a PDF format. In this example, the form contains the Export to File and Export to Stream buttons that allow you to save the PDF document with the chart to a file or a stream.
Follow the steps below to implement this scenario:
Add a Chart Control object to the form. Make sure that the Chart Control Name is chartControl1 in the Visual Studio Properties window. For more information, see the following topic: How to: Add a Chart to a Windows Forms Application.
Create a Series object in the Form1_Load event handler. Use the ChartControl.Series.Add method to add this series to the chart.
Specify the ChartControl.DataSource, Series.ArgumentDataMember, and Series.ValueDataMembers properties to populate the chart with data. In this example, the GetSales method returns the chart data source.
Add two SimpleButtons to the form. Set the first button’s Text property to Export to File and the second button’s property to Export to Stream.
The Chart Control uses the DevExpress Printing Library to export a chart. To use this library, add references to the following assemblies to the project:
- DevExpress.XtraPrinting.v24.1,
- DevExpress.Printing.v24.1.Core.
Handle the first button’s Click event and use the ChartControl.IsPrintingAvailable property to check whether the chart can be exported. Call the ChartControl.ExportToPdf(String, PdfExportOptions) method to export the chart to a file. Pass the path to this file as the first parameter to the ExportToPdf method. Create an instance of the PdfExportOptions class to specify export settings. Set the PdfExportOptions.ConvertImagesToJpeg property to false to export the chart in the vector-based format. Pass the PdfExportOptions instance as the second parameter to the ExportToPdf method.
Handle the second button’s Click event and use the ChartControl.IsPrintingAvailable property to check whether the chart can be exported. Call the ChartControl.ExportToPdf(System.IO.Stream) method to export the chart to a stream. This example uses FileStream, and you can open the file where the stream is saved to check the export result.
using DevExpress.XtraCharts;
using DevExpress.XtraPrinting;
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;
namespace ExportToPDF {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
Series series = new Series("Series1", ViewType.Bar);
chartControl1.Series.Add(series);
chartControl1.DataSource = GetSales();
series.ArgumentDataMember = "Region";
series.ValueDataMembers.AddRange(new string[] { "Sales" });
}
private DataTable GetSales() {
int prevYear = DateTime.Now.Year - 1;
DataTable table = new DataTable();
table.Columns.Add("Region", typeof(string));
table.Columns.Add("Sales", typeof(decimal));
table.Rows.Add("Asia", 4.2372D);
table.Rows.Add("Australia", 1.7871D);
table.Rows.Add("Europe", 3.0884D);
table.Rows.Add("North America", 3.4855D);
table.Rows.Add("South America", 1.6027D);
return table;
}
private void simpleButton1_Click(object sender, EventArgs e) {
if (chartControl1.IsPrintingAvailable) {
// The PDF file name.
string fileName = "Output.pdf";
// Path to the PDF file.
string filePath = "c:\\temp";
if (!Directory.Exists(filePath))
Directory.CreateDirectory(filePath);
string fullPath = String.Format("{0}\\{1}", filePath, fileName);
// Exports the chart in the vector-based format to a PDF file.
chartControl1.ExportToPdf(fullPath, new PdfExportOptions { ConvertImagesToJpeg = false });
}
}
private void simpleButton2_Click(object sender, EventArgs e) {
if (chartControl1.IsPrintingAvailable) {
// The PDF file name.
string fileName = "Output.pdf";
// Path to the PDF file.
string filePath = "c:\\temp";
if (!Directory.Exists(filePath))
Directory.CreateDirectory(filePath);
string fullPath = String.Format("{0}\\{1}", filePath, fileName);
// Exports to a stream as PDF.
FileStream pdfStream = new FileStream(fullPath, FileMode.Create);
chartControl1.ExportToPdf(pdfStream);
pdfStream.Close();
}
}
}
}