C1Flexgrid for WPF provides lot of flexibility in terms of exporting the data to various formats. In this blog, we look at the approach to export the grid data to PDF Format.

PDF Export technique depends on the following two important things :

  1. GetPageImages method of C1Flexgrid

  2. Page Template


GetPageImages method returns a list of images that represent a paged view of the grid. These images can then be added to a collection and rendered to the PDF page. Page Template defines the layout of the Page to be rendered in the exported PDF.

Following Code snippet defines the PDF Export :

// export the grid to a PDF file
 void SavePdf(Stream s, string documentName)
 {
     // get root element to lay out the PDF pages
     Panel root = null;
    for (var parent = c1Flexgrid1.Parent as FrameworkElement; parent != null; parent = parent.Parent as FrameworkElement)
     {
         if (parent is Panel)
         {
             root = parent as Panel;
         }
     }
     // create pdf document
     var pdf = new C1PdfDocument(PaperKind.Letter, false);
     // get page size
     var rc = pdf.PageRectangle;
     var m = new Thickness(96, 96, 96 / 2, 96 / 2);
     var scaleMode = ScaleMode.ActualSize;
     // create panel to hold elements while they render
     var pageTemplate = new PageTemplate();
     pageTemplate.Width = rc.Width;
     pageTemplate.Height = rc.Height;
     pageTemplate.SetPageMargin(m);
     root.Children.Add(pageTemplate);
     // render grid into PDF document
     var sz = new Size(rc.Width - m.Left - m.Right, rc.Height - m.Top - m.Bottom);
     var pages = c1Flexgrid1.GetPageImages(scaleMode, sz, 100);
     for (int i = 0; i < pages.Count; i++)
     {
         // skip a page when necessary
         if (i > 0)
         {
             pdf.NewPage();
         }
         // set content
         pageTemplate.PageContent.Child = pages[i];
         //pageTemplate.PageContent.Stretch = System.Windows.Media.Stretch.Uniform;
         pageTemplate.PageContent.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
         // set header/footer text
         //pageTemplate.HeaderLeft.Text = documentName;
         pageTemplate.FooterRight.Text = string.Format("Page {0} of {1}",
         i + 1, pages.Count);
         // measure page element
         pageTemplate.Measure(new Size(rc.Width, rc.Height));
         pageTemplate.UpdateLayout();
         // add page element to PDF
         pdf.DrawElement(pageTemplate, rc);
     }
     // done with template
     root.Children.Remove(pageTemplate);
     // save the PDF document
     pdf.Save(s);
     s.Close();
 }


Refer to the attached samples for complete implementation.
Download C# Sample
Download VB Sample