This is a migrated thread and some comments may be shown as answers.

Header and footer in PDF file

0 Answers 184 Views
RichTextBox
This is a migrated thread and some comments may be shown as answers.
Marcelo
Top achievements
Rank 1
Marcelo asked on 08 Jan 2013, 06:06 PM
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



No answers yet. Maybe you can help?

Tags
RichTextBox
Asked by
Marcelo
Top achievements
Rank 1
Share this question
or