private void buttonRun_Click(object sender, RoutedEventArgs e) { SaveFileDialog saveFiledialog = new SaveFileDialog(); saveFiledialog.Filter = "PDF Document (*.pdf)|*.pdf"; bool?result = saveFiledialog.ShowDialog(); if (!result.HasValue || !result.Value) { return; } //create a pdf document PdfDocument document = new PdfDocument(); //margin PdfMargins margin = new PdfMargins(); margin.Top = ConvertUnits(1.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point); margin.Bottom = margin.Top; margin.Left = ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point); margin.Right = margin.Left; //create one page PdfPageBase page = document.Pages.Add(PdfPageSize.A4, margin, PdfPageRotateAngle.RotateAngle0, PdfPageOrientation.Landscape); float y = 0; //title PdfBrush brush1 = PdfBrushes.Black; PdfTrueTypeFont font1 = new PdfInternalFont(new Font("Arial", 16f, System.Drawing.FontStyle.Bold), true); PdfStringFormat format1 = new PdfStringFormat(PdfTextAlignment.Center); page.Canvas.DrawString("Vendor List", font1, brush1, page.Canvas.ClientSize.Width / 2, y, format1); y = y + font1.MeasureString("Vendor List", format1).Height; y = y + 5; PdfGrid grid = new PdfGrid(); grid.Style.CellPadding = new PdfPaddings(1, 1, 1, 1); grid.Columns.Add(this.dataGridVendorList.Columns.Count); float width = page.Canvas.ClientSize.Width - (grid.Columns.Count + 1); grid.Columns[0].Width = width * 0.25f; grid.Columns[1].Width = width * 0.25f; grid.Columns[2].Width = width * 0.25f; grid.Columns[3].Width = width * 0.15f; grid.Columns[4].Width = width * 0.10f; //header of grid PdfGridRow headerRow = grid.Headers.Add(1)[0]; headerRow.Style.Font = new PdfInternalFont(new Font("Arial", 11f, System.Drawing.FontStyle.Bold), true); String[] header = { "Vendor Name", "Address", "City", "State", "Country" }; for (int i = 0; i < header.Length; i++) { headerRow.Cells[i].Value = header[i]; headerRow.Cells[i].StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle); } headerRow.Style.BackgroundBrush = PdfBrushes.SeaGreen; //datarow of grid int rowIndex = 1; foreach (Vendor vendor in this.dataSource) { PdfGridRow row = grid.Rows.Add(); row.Style.Font = new PdfInternalFont(new Font("Arial", 10f), true); row.Cells[0].Value = vendor.VendorName; row.Cells[1].Value = vendor.Address; row.Cells[2].Value = vendor.City; row.Cells[3].Value = vendor.State; row.Cells[4].Value = vendor.Country; row.Cells[0].Style.BackgroundBrush = PdfBrushes.LightGray; row.Cells[0].StringFormat = row.Cells[1].StringFormat = row.Cells[2].StringFormat = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle); row.Cells[3].StringFormat = row.Cells[4].StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle); if (rowIndex % 2 == 0) { row.Style.BackgroundBrush = PdfBrushes.YellowGreen; } else { row.Style.BackgroundBrush = PdfBrushes.Bisque; } rowIndex++; } StringBuilder totalAmount = new StringBuilder(); var groupByCountry = this.dataSource.GroupBy(v => v.Country) .Select(g => new { Name = g.Key, Count = g.Count() }); foreach (var item in groupByCountry) { totalAmount.AppendFormat("{0}:\t{1}", item.Name, item.Count); totalAmount.AppendLine(); } PdfGridRow totalAmountRow = grid.Rows.Add(); totalAmountRow.Style.BackgroundBrush = PdfBrushes.Plum; totalAmountRow.Cells[0].Value = "Total Amount"; totalAmountRow.Cells[0].Style.Font = new PdfInternalFont(new Font("Arial", 10f, System.Drawing.FontStyle.Bold), true); totalAmountRow.Cells[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle); totalAmountRow.Cells[1].ColumnSpan = 4; totalAmountRow.Cells[1].Value = totalAmount.ToString(); totalAmountRow.Cells[1].Style.Font = new PdfInternalFont(new Font("Arial", 10f, System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic), true); totalAmountRow.Cells[1].StringFormat = new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Middle); PdfLayoutResult resultl = grid.Draw(page, new PointF(0, y)); y = y + resultl.Bounds.Height + 5; PdfBrush brush2 = PdfBrushes.Gray; PdfTrueTypeFont font2 = new PdfInternalFont(new Font("Arial", 9f)); resultl.Page.Canvas.DrawString(String.Format("* All {0} vendors in the list", grid.Rows.Count - 1), font2, brush2, 5, y); //Save pdf file. using (Stream stream = saveFiledialog.OpenFile()) { document.SaveToStream(stream); } document.Close(); }
private void buttonRun_Click(object sender, RoutedEventArgs e) { SaveFileDialog saveFiledialog = new SaveFileDialog(); saveFiledialog.Filter = "PDF Document (*.pdf)|*.pdf"; bool? result = saveFiledialog.ShowDialog(); if (!result.HasValue || !result.Value) { return; } //create a pdf document PdfDocument document = new PdfDocument(); //margin PdfMargins margin = new PdfMargins(); margin.Top = ConvertUnits(1.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point); margin.Bottom = margin.Top; margin.Left = ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point); margin.Right = margin.Left; //create one page PdfPageBase page = document.Pages.Add(PdfPageSize.A4, margin, PdfPageRotateAngle.RotateAngle0, PdfPageOrientation.Landscape); float y = 0; //title PdfBrush brush1 = PdfBrushes.Black; PdfTrueTypeFont font1 = new PdfInternalFont(new Font("Arial", 16f, System.Drawing.FontStyle.Bold), true); PdfStringFormat format1 = new PdfStringFormat(PdfTextAlignment.Center); page.Canvas.DrawString("Vendor List", font1, brush1, page.Canvas.ClientSize.Width / 2, y, format1); y = y + font1.MeasureString("Vendor List", format1).Height; y = y + 5; PdfGrid grid = new PdfGrid(); grid.Style.CellPadding = new PdfPaddings(1, 1, 1, 1); grid.Columns.Add(this.dataGridVendorList.Columns.Count); float width = page.Canvas.ClientSize.Width - (grid.Columns.Count + 1); grid.Columns[0].Width = width * 0.25f; grid.Columns[1].Width = width * 0.25f; grid.Columns[2].Width = width * 0.25f; grid.Columns[3].Width = width * 0.15f; grid.Columns[4].Width = width * 0.10f; //header of grid PdfGridRow headerRow = grid.Headers.Add(1)[0]; headerRow.Style.Font = new PdfInternalFont(new Font("Arial", 11f, System.Drawing.FontStyle.Bold), true); String[] header = { "Vendor Name", "Address", "City", "State", "Country" }; for (int i = 0; i < header.Length; i++) { headerRow.Cells[i].Value = header[i]; headerRow.Cells[i].StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle); } headerRow.Style.BackgroundBrush = PdfBrushes.SeaGreen; //datarow of grid int rowIndex = 1; foreach (Vendor vendor in this.dataSource) { PdfGridRow row = grid.Rows.Add(); row.Style.Font = new PdfInternalFont(new Font("Arial", 10f), true); row.Cells[0].Value = vendor.VendorName; row.Cells[1].Value = vendor.Address; row.Cells[2].Value = vendor.City; row.Cells[3].Value = vendor.State; row.Cells[4].Value = vendor.Country; row.Cells[0].Style.BackgroundBrush = PdfBrushes.LightGray; row.Cells[0].StringFormat = row.Cells[1].StringFormat = row.Cells[2].StringFormat = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle); row.Cells[3].StringFormat = row.Cells[4].StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle); if (rowIndex % 2 == 0) { row.Style.BackgroundBrush = PdfBrushes.YellowGreen; } else { row.Style.BackgroundBrush = PdfBrushes.Bisque; } rowIndex++; } StringBuilder totalAmount = new StringBuilder(); var groupByCountry = this.dataSource.GroupBy(v => v.Country) .Select(g => new { Name = g.Key, Count = g.Count() }); foreach (var item in groupByCountry) { totalAmount.AppendFormat("{0}:\t{1}", item.Name, item.Count); totalAmount.AppendLine(); } PdfGridRow totalAmountRow = grid.Rows.Add(); totalAmountRow.Style.BackgroundBrush = PdfBrushes.Plum; totalAmountRow.Cells[0].Value = "Total Amount"; totalAmountRow.Cells[0].Style.Font = new PdfInternalFont(new Font("Arial", 10f, System.Drawing.FontStyle.Bold), true); totalAmountRow.Cells[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle); totalAmountRow.Cells[1].ColumnSpan = 4; totalAmountRow.Cells[1].Value = totalAmount.ToString(); totalAmountRow.Cells[1].Style.Font = new PdfInternalFont(new Font("Arial", 10f, System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic), true); totalAmountRow.Cells[1].StringFormat = new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Middle); PdfLayoutResult resultl = grid.Draw(page, new PointF(0, y)); y = y + resultl.Bounds.Height + 5; PdfBrush brush2 = PdfBrushes.Gray; PdfTrueTypeFont font2 = new PdfInternalFont(new Font("Arial", 9f)); resultl.Page.Canvas.DrawString(String.Format("* All {0} vendors in the list", grid.Rows.Count - 1), font2, brush2, 5, y); //Save pdf file. using (Stream stream = saveFiledialog.OpenFile()) { document.SaveToStream(stream); } document.Close(); }