private static Table CreateNewTable(ref Document workingDoc, ref string[] rowHeaders, Font fontHeader, int fontSize) { int intX = 0; Table workingTable = new Table(); workingTable.Borders.Width = 0.5; foreach (string thisColumn in rowHeaders) { workingTable.AddColumn(Unit.FromCentimeter(fontSize)); } Row thisHeader = workingTable.AddRow(); thisHeader.Format.Font = fontHeader.Clone(); thisHeader.Format.Shading = ShadingHeader.Clone(); thisHeader.Shading = ShadingHeader.Clone(); thisHeader.HeadingFormat = true; foreach (string thisColumn in rowHeaders) { thisHeader.Cells[intX].AddParagraph(rowHeaders[intX]); thisHeader.Cells[intX].Shading = ShadingHeader.Clone(); intX += 1; } return(workingTable); }
private static int ExportToPdf(DataTable queryResults) { try { PdfDocumentRenderer renderer = new PdfDocumentRenderer(); int fontSize = 10; var pdfDoc = new PdfDocument(); var pdfPage = pdfDoc.AddPage(); var pdfGfx = XGraphics.FromPdfPage(pdfPage); ShadingHeader.Color = Color.FromRgb(189, 212, 249); ShadingAlternateRow.Color = Color.FromRgb(224, 236, 255); // Create a new MigraDoc document Document pdfDDocument = new Document(); pdfDDocument.Info.Title = _title; pdfDDocument.Info.Subject = _title + " PDF Generated by Data Lake Export (PDF) "; pdfDDocument.Info.Author = "Billy Willoughby"; SetupDefaultPage(ref pdfDDocument, ref fontSize); //Setup Fonts XFont myStandardFont = new XFont(FontFamily.GenericMonospace, fontSize, XFontStyle.Regular); XFont myHeaderFont = new XFont(FontFamily.GenericMonospace, fontSize, XFontStyle.Bold); Font fontStandard = new Font(FontFamily.GenericMonospace.Name, fontSize); Font fontHeader = new Font(FontFamily.GenericMonospace.Name, fontSize); fontHeader.Bold = true; CreateNewSection(ref pdfDDocument, _title); string[] rowHeaders = new string[queryResults.Columns.Count]; XSize[] columnWidth = new XSize[queryResults.Columns.Count]; /*Holder for Column names*/ foreach (DataColumn thisColumn in queryResults.Columns) { rowHeaders[queryResults.Columns.IndexOf(thisColumn)] = thisColumn.ColumnName; if (_rowBreak != "" && _rowBreak.ToUpper() == thisColumn.ColumnName.ToUpper() && _rowBreakLocation == null) { _rowBreakLocation = queryResults.Columns.IndexOf(thisColumn); } } Table thisTable = CreateNewTable(ref pdfDDocument, ref rowHeaders, fontHeader, fontSize); bool rowFlip = false; //int documentRowIndex = 0; //Row one was created in create table function int tableRowIndex = 0; //Row one was created in create table function Row thisRow; if (queryResults.Rows.Count > 0) { foreach (DataRow thisDataRow in queryResults.Rows) { if (queryResults.Rows.IndexOf(thisDataRow) / 5000.0 == Math.Truncate(queryResults.Rows.IndexOf(thisDataRow) / 5000.0)) { Console.WriteLine("Reading Rows " + queryResults.Rows.IndexOf(thisDataRow) + "+"); } if (queryResults.Rows.IndexOf(thisDataRow) == 1 && _rowBreak != "") { pdfDDocument.LastSection.AddParagraph( thisDataRow.ItemArray[(int)_rowBreakLocation].ToString().Trim()); pdfDDocument.LastSection.LastParagraph.AddBookmark( thisDataRow.ItemArray[(int)_rowBreakLocation].ToString().Trim()); } if (_rowBreak != "" && _rowBreakLocation != null && thisDataRow.ItemArray[(int)_rowBreakLocation].ToString().Trim() != "" /*&& tableRowIndex > 1*/) { if (_rowBreak != "") { _title = thisDataRow.ItemArray[(int)_rowBreakLocation].ToString().Trim(); pdfDDocument.LastSection.PageSetup.TopMargin = Unit.FromInch(.65); } if (thisTable.Rows.Count > 1) { Table finalTable = thisTable.Clone(); AutosizeTableColumns(ref finalTable, ref rowHeaders, ref columnWidth, myStandardFont, myHeaderFont, fontSize); pdfDDocument.LastSection.Add(finalTable); CreateNewSection(ref pdfDDocument, thisDataRow.ItemArray[(int)_rowBreakLocation].ToString().Trim()); thisTable = CreateNewTable(ref pdfDDocument, ref rowHeaders, fontHeader, fontSize); columnWidth = new XSize[queryResults.Columns.Count]; tableRowIndex = 0; } } tableRowIndex++; thisRow = thisTable.AddRow(); thisRow.Format.Font = fontStandard.Clone(); if (rowFlip) { rowFlip = false; thisRow.Shading = ShadingAlternateRow.Clone(); } else { rowFlip = true; } foreach (DataColumn thisColumn in queryResults.Columns) { thisRow.Cells[queryResults.Columns.IndexOf(thisColumn)].AddParagraph( thisDataRow.ItemArray[queryResults.Columns.IndexOf(thisColumn)].ToString()); if (pdfGfx.MeasureString(thisDataRow.ItemArray[queryResults.Columns.IndexOf(thisColumn)].ToString(), myStandardFont).Width > columnWidth[queryResults.Columns.IndexOf(thisColumn)].Width) { columnWidth[queryResults.Columns.IndexOf(thisColumn)] = pdfGfx.MeasureString(thisDataRow.ItemArray[queryResults.Columns.IndexOf(thisColumn)].ToString(), myStandardFont); columnWidth[queryResults.Columns.IndexOf(thisColumn)] = pdfGfx.MeasureString(thisDataRow.ItemArray[queryResults.Columns.IndexOf(thisColumn)].ToString(), myStandardFont); columnWidth[queryResults.Columns.IndexOf(thisColumn)].Width = columnWidth[queryResults.Columns.IndexOf(thisColumn)].Width + fontSize; } } } //End Loop AutosizeTableColumns(ref thisTable, ref rowHeaders, ref columnWidth, myStandardFont, myHeaderFont, fontSize); pdfDDocument.LastSection.PageSetup.LeftMargin = Unit.FromInch(.25); if (_rowBreak != "") { pdfDDocument.LastSection.PageSetup.TopMargin = Unit.FromInch(.75); } pdfDDocument.LastSection.Add(thisTable); } else { Console.WriteLine("No rows found."); return(0); } Console.WriteLine("Rendering PDF ..."); if (_optionPdf == "4") { pdfDDocument.DefaultPageSetup.Orientation = Orientation.Landscape; pdfDDocument.DefaultPageSetup.PageHeight = Unit.FromInch(_intMajorWidth + .45 /*Margins*/); pdfDDocument.DefaultPageSetup.PageWidth = Unit.FromInch(11); } if (_optionPdf == "0") { if (_intMajorWidth + .45 /*Margins*/ <= 8) /*Letter*/ { Console.WriteLine("Render Width: " + ((_intMajorWidth + .45).ToString("####.0")) + ", selecting Letter Portrait"); pdfDDocument.DefaultPageSetup.Orientation = Orientation.Portrait; pdfDDocument.DefaultPageSetup.PageHeight = Unit.FromInch(11); pdfDDocument.DefaultPageSetup.PageWidth = Unit.FromInch(8.5); pdfDDocument.DefaultPageSetup.RightMargin = .25; pdfDDocument.DefaultPageSetup.LeftMargin = .25; pdfDDocument.DefaultPageSetup.BottomMargin = .25; pdfDDocument.DefaultPageSetup.TopMargin = .25; } if (_intMajorWidth + .45 /*Margins*/ > 8 && _intMajorWidth + .45 /*Margins*/ <= 11) /*Letter Landscape*/ { Console.WriteLine("Render Width: " + ((_intMajorWidth + .45).ToString("####.0")) + ", selecting Letter Landscape"); pdfDDocument.DefaultPageSetup.Orientation = Orientation.Landscape; pdfDDocument.DefaultPageSetup.PageHeight = Unit.FromInch(11); pdfDDocument.DefaultPageSetup.PageWidth = Unit.FromInch(8.5); pdfDDocument.DefaultPageSetup.RightMargin = .25; pdfDDocument.DefaultPageSetup.LeftMargin = .25; pdfDDocument.DefaultPageSetup.BottomMargin = .25; pdfDDocument.DefaultPageSetup.TopMargin = .25; } if (_intMajorWidth + .45 /*Margins*/ > 11 && _intMajorWidth + .45 /*Margins*/ <= 14) /*Legal Landscape*/ { Console.WriteLine("Render Width: " + ((_intMajorWidth + .45).ToString("####.0")) + ", selecting Legal Landscape"); pdfDDocument.DefaultPageSetup.Orientation = Orientation.Landscape; pdfDDocument.DefaultPageSetup.PageHeight = Unit.FromInch(14); pdfDDocument.DefaultPageSetup.PageWidth = Unit.FromInch(8.5); pdfDDocument.DefaultPageSetup.RightMargin = .25; pdfDDocument.DefaultPageSetup.LeftMargin = .25; pdfDDocument.DefaultPageSetup.BottomMargin = .25; pdfDDocument.DefaultPageSetup.TopMargin = .25; } if (_intMajorWidth + .45 /*Margins*/ > 14) /*Custom*/ { Console.WriteLine("Render Width: " + ((_intMajorWidth + .45).ToString("####.0")) + ", selecting Custom Paper"); pdfDDocument.DefaultPageSetup.PageHeight = Unit.FromInch(_intMajorWidth + .45 /*Margins*/); pdfDDocument.DefaultPageSetup.PageWidth = Unit.FromInch(11); pdfDDocument.DefaultPageSetup.Orientation = Orientation.Landscape; pdfDDocument.DefaultPageSetup.RightMargin = .25; pdfDDocument.DefaultPageSetup.LeftMargin = .25; pdfDDocument.DefaultPageSetup.BottomMargin = .25; pdfDDocument.DefaultPageSetup.TopMargin = .25; } } Console.WriteLine("Rendering ..."); renderer.Document = pdfDDocument; renderer.DocumentRenderer.PrepareDocumentProgress += DocumentRenderer_PrepareDocumentProgress; renderer.DocumentRenderer.PrepareDocument(); renderer.RenderDocument(); // Save the document... string filename = _filename; Console.WriteLine(); Console.WriteLine("Writing to disk ..."); renderer.PdfDocument.Save(filename); Console.WriteLine("Fini"); return(0); } catch (Exception ex) { Console.WriteLine(ex.Message); return(-4); } }