Header and footer in PDF file

1 posts, 0 answers
  1. Marcelo
    Marcelo avatar
    14 posts
    Member since:
    Jun 2011

    Posted 08 Jan 2013 Link to this post

    Hi,

    I' m generating a PDF file with several images that export from chartview.

    I need create a custom header and a footer,

    In header in da right side I need put a Image logo
    In footer in the left side need put one string, and da right side a number of pages (document) .

    Already managed to create a file but have the following problems:

    - The logo in the header is cut
    - Always generates a page at the beginning with only the header and footer
    - How can I insert the number of pages type (1 of 5)

    I used this code:

    #region Export Pdf
     
           private void btnSavePdf_Click(object sender, RoutedEventArgs e)
           {
               SaveFileDialog dialog = new SaveFileDialog();
               dialog.DefaultExt = "pdf";
               dialog.Filter = String.Format("{1} files (*.{0})|*.{0}|All files (*.*)|*.*", "pdf", "Adobe PDF Document");
               dialog.FilterIndex = 1;
     
               if (dialog.ShowDialog() == true)
               {
                   using (Stream stream = dialog.OpenFile())
                   {
                       busyWindow = new BusyWindow(Translator.GetTranslation("lblPleaseWait") + "...");
                       busyWindow.Show();
     
                       RadDocument document = new RadDocument();
     
                       #region Headers&Footers
     
                       RadDocument headerDoc = new RadDocument();
                       RadDocument footerDoc = new RadDocument();
     
                       #region Headers
                       Telerik.Windows.Documents.Model.Section hSection = new Telerik.Windows.Documents.Model.Section();
                       headerDoc.Sections.Add(hSection);
                       headerDoc.SectionDefaultPageMargin = new Telerik.Windows.Documents.Layout.Padding(15,15,15,15);
                        
                       Telerik.Windows.Documents.Model.Paragraph hparagraph = new Telerik.Windows.Documents.Model.Paragraph();
                       hSection.Blocks.Add(hparagraph);
                                       
     
                       ImageInline image = new ImageInline(new Uri("......png", UriKind.Relative));
                       hparagraph.Children.Add(image);
                       hparagraph.FlowDirection = System.Windows.FlowDirection.RightToLeft;
                       #endregion
     
                       #region Footers
                       Telerik.Windows.Documents.Model.Section fSection = new Telerik.Windows.Documents.Model.Section();
                       footerDoc.Sections.Add(fSection);
                       footerDoc.SectionDefaultPageMargin = new Telerik.Windows.Documents.Layout.Padding(15,15,15,15);
     
                       Telerik.Windows.Documents.Model.Paragraph fparagraph = new Telerik.Windows.Documents.Model.Paragraph();
                       fSection.Blocks.Add(fparagraph);
     
                       Telerik.Windows.Documents.Model.Span fspan = new Telerik.Windows.Documents.Model.Span(ApplicationDomain.CurrentUser.Name + " - " + DateTime.Now);
                       fspan.FontSize = 12;
                       fparagraph.Inlines.Add(fspan);
     
                       #endregion
     
                       Header header = new Header();
                       Footer footer = new Footer();
                       header.Body = headerDoc;
                       footer.Body = footerDoc;
     
                       #endregion
     
                       Telerik.Windows.Documents.Model.Section section = new Telerik.Windows.Documents.Model.Section();
                       section.Headers.Default = header;
                       section.Footers.Default = footer;
     
                       document.Sections.Add(section);
                       document.SectionDefaultPageMargin = new Telerik.Windows.Documents.Layout.Padding(10, 10, 10, 10);
     
                       document.HasDifferentEvenAndOddHeadersFooters = false;
     
                       CreateDocumentGrid(document, tblCompetitiveIndex as RadGridView);
                       CreateDocumemntChart(document, chChart1 as RadCartesianChart);
                       CreateDocumemntChart(document, chChart2 as RadCartesianChart);
                       CreateDocumemntChart(document, chChart3 as RadCartesianChart);
     
                       document.LayoutMode = DocumentLayoutMode.Paged;
                       document.SectionDefaultPageOrientation = PageOrientation.Landscape;
     
                       document.Measure(RadDocument.MAX_DOCUMENT_SIZE);
                       document.Arrange(new RectangleF(PointF.Empty, document.DesiredSize));
     
                       PdfFormatProvider provider = new PdfFormatProvider();
     
                       provider.Export(document, stream);
     
                       btnExport.IsOpen = false;
     
                       Dispatcher.BeginInvoke(() => busyWindow.Close());
     
     
                       MessageBoxPopUp messageBox = new MessageBoxPopUp();
                       messageBox.Show("lblInfo", "lblFileExportedSuccessfully", Buttons.Ok, 200, 130, 90);
                   }
               }
           }
            
           private void CreateDocumentGrid(RadDocument document, RadGridView grid)
           {
               List<GridViewBoundColumnBase> columns = (from c in grid.Columns.OfType<GridViewBoundColumnBase>()
                                                        orderby c.DisplayIndex
                                                        select c).ToList();
     
               Telerik.Windows.Documents.Model.Table table = new Telerik.Windows.Documents.Model.Table();
     
               Telerik.Windows.Documents.Model.Section section = new Telerik.Windows.Documents.Model.Section();
               Telerik.Windows.Documents.Model.Paragraph paragraph = new Telerik.Windows.Documents.Model.Paragraph();
     
               if (grid.ShowColumnHeaders)
               {
                   Telerik.Windows.Documents.Model.TableRow headerRow = new Telerik.Windows.Documents.Model.TableRow();
     
                   if (grid.GroupDescriptors.Count > 0)
                   {
                       Telerik.Windows.Documents.Model.TableCell indentCell = new Telerik.Windows.Documents.Model.TableCell();
                       indentCell.PreferredWidth = new TableWidthUnit(grid.GroupDescriptors.Count * 20);
                       indentCell.Background = Color.FromArgb(255, 127, 127, 127);
                       headerRow.Cells.Add(indentCell);
                   }
     
                   for (int i = 0; i < columns.Count; i++)
                   {
                       Telerik.Windows.Documents.Model.TableCell cell = new Telerik.Windows.Documents.Model.TableCell();
                       cell.Background = Color.FromArgb(255, 127, 127, 127);
                       //AddCellValue(cell, columns[i].UniqueName);
                       AddCellValue(cell, ((Telerik.Windows.Controls.GridViewDataColumn)columns[i]).Header.ToString());
                       cell.PreferredWidth = new TableWidthUnit((float)columns[i].ActualWidth);
                       headerRow.Cells.Add(cell);
                   }
     
                   table.Rows.Add(headerRow);
               }
     
               if (grid.Items.Groups != null)
               {
                   for (int i = 0; i < grid.Items.Groups.Count; i++)
                   {
                       AddGroupRow(table, grid.Items.Groups[i] as QueryableCollectionViewGroup, columns, grid);
                   }
               }
               else
               {
                   AddDataRows(table, grid.Items, columns, grid);
               }
     
               section.Blocks.Add(table);
               section.Blocks.Add(paragraph);
               document.Sections.Add(section);
           }
     
           private void CreateDocumemntChart(RadDocument document, RadCartesianChart chart)
           {
               Telerik.Windows.Documents.Model.Section section = new Telerik.Windows.Documents.Model.Section();
               Telerik.Windows.Documents.Model.Paragraph paragraph = new Telerik.Windows.Documents.Model.Paragraph();
     
               using (MemoryStream ms = new MemoryStream())
               {
                   Telerik.Windows.Media.Imaging.ExportExtensions.ExportToImage(chart, ms, new PngBitmapEncoder());
     
                   double imageWidth = chart.ActualWidth;
                   double imageHeight = chart.ActualHeight;
     
                   if (imageWidth > 625)
                   {
                       imageWidth = 625;
                       imageHeight = chart.ActualHeight * imageWidth / chart.ActualWidth;
                   }
     
                   ImageInline image = new ImageInline(ms, new Size(imageWidth, imageHeight), "png");
     
                   paragraph.Inlines.Add(image);
                   section.Blocks.Add(paragraph);
                   document.Sections.Add(section);
               }
            
            
           }
     
           private void AddDataRows(Telerik.Windows.Documents.Model.Table table, IList items, IList<GridViewBoundColumnBase> columns, RadGridView grid)
           {
               for (int i = 0; i < items.Count; i++)
               {
                   Telerik.Windows.Documents.Model.TableRow row = new Telerik.Windows.Documents.Model.TableRow();
     
                   if (grid.GroupDescriptors.Count > 0)
                   {
                       Telerik.Windows.Documents.Model.TableCell indentCell = new Telerik.Windows.Documents.Model.TableCell();
                       indentCell.PreferredWidth = new TableWidthUnit(grid.GroupDescriptors.Count * 20);
                       indentCell.Background = Color.FromArgb(255, 251, 247, 255);
                       row.Cells.Add(indentCell);
                   }
     
                   for (int j = 0; j < columns.Count; j++)
                   {
                       Telerik.Windows.Documents.Model.TableCell cell = new Telerik.Windows.Documents.Model.TableCell();
     
                       object value = columns[j].GetValueForItem(items[i]);
     
                       AddCellValue(cell, value != null ? value.ToString() : string.Empty);
     
                       cell.PreferredWidth = new TableWidthUnit((float)columns[j].ActualWidth);
                       cell.Background = Color.FromArgb(255, 251, 247, 255); ;
     
                       row.Cells.Add(cell);
                   }
     
                   table.Rows.Add(row);
               }
           }
     
           private void AddGroupRow(Telerik.Windows.Documents.Model.Table table, QueryableCollectionViewGroup group, IList<GridViewBoundColumnBase> columns, RadGridView grid)
           {
               Telerik.Windows.Documents.Model.TableRow row = new Telerik.Windows.Documents.Model.TableRow();
     
               int level = GetGroupLevel(group);
               if (level > 0)
               {
                   Telerik.Windows.Documents.Model.TableCell cell = new Telerik.Windows.Documents.Model.TableCell();
                   cell.PreferredWidth = new TableWidthUnit(level * 20);
                   cell.Background = Color.FromArgb(255, 216, 216, 216);
                   row.Cells.Add(cell);
               }
     
               Telerik.Windows.Documents.Model.TableCell aggregatesCell = new Telerik.Windows.Documents.Model.TableCell();
               aggregatesCell.Background = Color.FromArgb(255, 216, 216, 216);
               aggregatesCell.ColumnSpan = columns.Count + (grid.GroupDescriptors.Count > 0 ? 1 : 0) - (level > 0 ? 1 : 0);
     
               AddCellValue(aggregatesCell, group.Key != null ? group.Key.ToString() : string.Empty);
     
               foreach (AggregateResult result in group.AggregateResults)
               {
                   AddCellValue(aggregatesCell, result.FormattedValue != null ? result.FormattedValue.ToString() : string.Empty);
               }
     
               row.Cells.Add(aggregatesCell);
     
               table.Rows.Add(row);
     
               if (group.HasSubgroups)
               {
                   foreach (var g in group.Subgroups)
                   {
                       AddGroupRow(table, g as QueryableCollectionViewGroup, columns, grid);
                   }
               }
               else
               {
                   AddDataRows(table, group.Items, columns, grid);
               }
           }
     
           private void AddCellValue(Telerik.Windows.Documents.Model.TableCell cell, string value)
           {
               Telerik.Windows.Documents.Model.Paragraph paragraph = new Telerik.Windows.Documents.Model.Paragraph();
               cell.Blocks.Add(paragraph);
     
               Telerik.Windows.Documents.Model.Span span = new Telerik.Windows.Documents.Model.Span();
               if (value == null || value == "")
               {
                   span.Text = " ";
               }
               else
               {
                   span.Text = value;
               }
               paragraph.Inlines.Add(span);
           }
     
           private int GetGroupLevel(IGroup group)
           {
               int level = 0;
     
               IGroup parent = group.ParentGroup;
     
               while (parent != null)
               {
                   level++;
                   parent = parent.ParentGroup;
               }
     
               return level;
           }
     
           #endregion



    Best Regards,
    Marcelo Videira



Back to Top