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);
                }
            }