If you find this article useful, consider making a small donation to show your support for this web site and its content.
Free app Developer Interview available here.

Available on the iPhone App Store
Available on the Google Play
AboutMe
About me:
Hi. My name is Farooq Kaiser and I'm a software developer from Toronto, Canada.



MS Chart Controls to PDF with iTextSharp using XML Template

by Farooq Kaiser 10. February 2010 05:45

In this article, i will examined how to build reports with ItextSharp PDF control and Ms Chart controls using XML template. The Xml template gives us freedom to change the contents without having to recompile and deploy the application again. Here is our sample report in XML template.

   1: <?xml version="1.0" encoding="utf-8" ?>
   2: <itext>
   3: <paragraph font="Verdan" size="13.0" fontstyle="bold" align="Default" red="255" green="0" blue="0">My first Report</paragraph>
   4: <paragraph font="Verdan" size="8.0" align="Default">
   5:   <table columns="2" width="60%" align="Left" cellpadding="3" cellspacing="0" widths="50;50" borderwidth="0">
   6:     <row>
   7:       <cell borderwidth="0" backgroundcolor="#FF0000" horizontalalign="Default" verticalalign="Default" header="true" >
   8:         <paragraph font="Verdan" size="9.0" fontstyle="bold" leading="10" align="Default" red="255" green="255" blue="255">
   9:           Header Column1
  10:         </paragraph>
  11:       </cell>
  12:       <cell borderwidth="0" backgroundcolor="#FF0000" horizontalalign="Default" verticalalign="Default" >
  13:         <paragraph  font="Verdan" size="9.0" fontstyle="bold" align="Default" red="255" green="255" blue="255">
  14:           Header Column2
  15:         </paragraph>
  16:       </cell>
  17:     </row>
  18:     <row>
  19:       <cell borderwidth="0.5" horizontalalign="Default" verticalalign="Default" red="255" green="0" blue="0">
  20:         <paragraph  font="Verdan" size="8.0" align="Default" leading="10">
  21:           Column1 Row1 data
  22:         </paragraph>
  23:       </cell>
  24:       <cell borderwidth="0.5" horizontalalign="Default" verticalalign="Default" red="255" green="0" blue="0">
  25:         <paragraph  font="Verdan" size="9.0" fontstyle="bold" align="Default" leading="10">
  26:           Column2 Row1 data
  27:         </paragraph>
  28:       </cell>
  29:     </row>
  30:     <row>
  31:       <cell borderwidth="0.5" horizontalalign="Default" verticalalign="Default" red="255" green="0" blue="0">
  32:         <paragraph  font="Verdan" size="8.0" align="Default" leading="10">
  33:           Column1 Row2 data
  34:         </paragraph>
  35:       </cell>
  36:       <cell borderwidth="0.5" horizontalalign="Default" verticalalign="Default" red="255" green="0" blue="0">
  37:         <paragraph  font="Verdan" size="9.0" fontstyle="bold" align="Default" leading="10">
  38:           Column2 Row2 data
  39:         </paragraph>
  40:       </cell>
  41:     </row>
  42:   </table >
  43: </paragraph>
  44: </itext>

Here is our C# code that will generate the PDF.

   1: XmlDocument xdox = new XmlDocument();
   2: xdox.Load(XMLFile);
   3: Document document = new Document();
   4: PdfWriter.GetInstance(document, new FileStream(OutPutFileName, FileMode.Create));
   5: ITextHandler xmlHandler = new ITextHandler(document);
   6: xmlHandler.Parse(xdox);

 

Here is our PDF output.

PDF1

Now, i want to implement chart control in our PDF, so here is our XML template.

   1: <?xml version="1.0" encoding="utf-8" ?>
   2: <itext>
   3: <paragraph font="Verdan" size="13.0" fontstyle="bold" align="Default" red="255" green="0" blue="0">My first Report</paragraph>
   4: <paragraph font="Verdan" size="8.0" align="Default">
   5:   <table columns="2" width="60%" align="Left" cellpadding="3" cellspacing="0" widths="50;50" borderwidth="0">
   6:     <row>
   7:       <cell borderwidth="0" backgroundcolor="#FF0000" horizontalalign="Default" verticalalign="Default" header="true" >
   8:         <paragraph font="Verdan" size="9.0" fontstyle="bold" leading="10" align="Default" red="255" green="255" blue="255">
   9:           Header Column1
  10:         </paragraph>
  11:       </cell>
  12:       <cell borderwidth="0" backgroundcolor="#FF0000" horizontalalign="Default" verticalalign="Default" >
  13:         <paragraph  font="Verdan" size="9.0" fontstyle="bold" align="Default" red="255" green="255" blue="255">
  14:           Header Column2
  15:         </paragraph>
  16:       </cell>
  17:     </row>
  18:     <row>
  19:       <cell borderwidth="0.5" horizontalalign="Default" verticalalign="Default" red="255" green="0" blue="0">
  20:         <paragraph  font="Verdan" size="8.0" align="Default" leading="10">
  21:           Column1 Row1 data
  22:         </paragraph>
  23:       </cell>
  24:       <cell borderwidth="0.5" horizontalalign="Default" verticalalign="Default" red="255" green="0" blue="0">
  25:         <paragraph  font="Verdan" size="9.0" fontstyle="bold" align="Default" leading="10">
  26:           Column2 Row1 data
  27:         </paragraph>
  28:       </cell>
  29:     </row>
  30:     <row>
  31:       <cell borderwidth="0.5" horizontalalign="Default" verticalalign="Default" red="255" green="0" blue="0">
  32:         <paragraph  font="Verdan" size="8.0" align="Default" leading="10">
  33:           Column1 Row2 data
  34:         </paragraph>
  35:       </cell>
  36:       <cell borderwidth="0.5" horizontalalign="Default" verticalalign="Default" red="255" green="0" blue="0">
  37:         <paragraph  font="Verdan" size="9.0" fontstyle="bold" align="Default" leading="10">
  38:           Column2 Row2 data
  39:         </paragraph>
  40:       </cell>
  41:     </row>
  42:   </table >
  43: </paragraph>
  44:   <paragraph font="Verdan" size="7.0"  align="Default">
  45:     <image url="images\Chart1.jpg" align="left" plainwidth="180" plainheight="140" />
  46:   </paragraph>
  47: </itext>

and, here is our c# code to generate Chart using ms chart control.

   1: private static void PieChart()
   2:       {
   3:           try
   4:           {
   5:               Chart chart1 = new Chart();
   6:  
   7:               Series series1 = new Series();
   8:  
   9:               ChartArea chartArea1 = new ChartArea();
  10:  
  11:               chartArea1.Name = "Default";
  12:               series1.Name = "Default";
  13:  
  14:               chart1.Series.Add(series1);
  15:  
  16:               double[] yValues = { 65.62, 75.54, 60.45, 55.73, 70.42 };
  17:               string[] xValues = { "France", "Canada", "UK", "USA", "Italy" };
  18:               chart1.Series["Default"].Points.DataBindXY(xValues, yValues);        
  19:  
  20:               // Set Doughnut chart type
  21:               chart1.Series["Default"].ChartType = SeriesChartType.Pie;
  22:  
  23:               // Set labels style
  24:               chart1.Series["Default"]["PieLabelStyle"] = "Outside";
  25:  
  26:               // Set Doughnut radius percentage
  27:               chart1.Series["Default"]["DoughnutRadius"] = "30";
  28:  
  29:               // Explode data point with label "Italy"
  30:               chart1.Series["Default"].Points[1]["Exploded"] = "true";
  31:  
  32:               // Set drawing style
  33:               chart1.Series["Default"]["PieDrawingStyle"] = "SoftEdge";
  34:  
  35:               chart1.Size = new System.Drawing.Size(412, 296);
  36:               chart1.TabIndex = 0;
  37:  
  38:               chart1.ChartAreas.Add(chartArea1);
  39:               // Enable 3D
  40:               chart1.ChartAreas["Default"].Area3DStyle.Enable3D = true;
  41:  
  42:               chartArea1.Area3DStyle.IsClustered = true;
  43:               chartArea1.Area3DStyle.IsRightAngleAxes = false;
  44:               chartArea1.Area3DStyle.Perspective = 10;
  45:               chartArea1.Area3DStyle.PointGapDepth = 0;
  46:               chartArea1.Area3DStyle.Rotation = 0;
  47:               chartArea1.Area3DStyle.WallWidth = 0;
  48:               chartArea1.AxisX.LabelStyle.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold);
  49:               chartArea1.AxisX.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
  50:               chartArea1.AxisX.MajorGrid.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
  51:               chartArea1.AxisY.LabelStyle.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold);
  52:               chartArea1.AxisY.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
  53:               chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
  54:               chartArea1.BackColor = System.Drawing.Color.Transparent;
  55:               chartArea1.BackSecondaryColor = System.Drawing.Color.Transparent;
  56:               chartArea1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
  57:               chartArea1.BorderWidth = 0;
  58:               chartArea1.Name = "Default";
  59:               chartArea1.ShadowColor = System.Drawing.Color.Transparent;
  60:            
  61:               chart1.SaveImage(@"images\Chart1.jpg", ChartImageFormat.Jpeg);
  62:           }
  63:           catch (Exception ex)
  64:           { 
  65:           
  66:           }
  67:  
  68:  
  69:       }

and, here is our PDF output.

PDF2

Summary

In this article, we examined how to build reports without using any third party components.

Currently rated 4.3 by 6 people

  • Currently 4.333333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , , ,

.NET | C# | Reports | XML


comments powered by Disqus

Comments

Jobs Autos Real estate Videos Power by Google