SimpleTable.cs
 // // This code is part of Document Solutions for PDF demos. // Copyright (c) MESCIUS inc. All rights reserved. // using System; using System.IO; using System.Drawing; using System.Text; using System.Data; using System.Linq; using System.Collections.Generic; using GrapeCity.Documents.Pdf; using GrapeCity.Documents.Text; using GrapeCity.Documents.Html; namespace DsPdfWeb.Demos { // This sample shows how to insert an HTML table into a PDF // along with other (non-HTML) content. // // Please see notes in comments at the top of HelloWorldHtml // sample code for details on adding DsHtml to your projects. public class SimpleTable { public int CreatePDF(Stream stream) { const string TTAG = "___TABLE___"; // HTML page template: const string tableTpl = "<!DOCTYPE html>" + "<html>" + "<head>" + "<style>" + "html * {" + " font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif !important;" + "}" + "h1 {" + " color: #fcf3cf;" + " background-color: #2471a3;" + " text-align: center;" + " padding: 6px;" + " margin-bottom: 0px;" + "}" + "table {" + " border-bottom: 1px solid #ddd;" + "}" + "thead {display: table-header-group;}" + "#employees {" + " font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif;" + " border-collapse: collapse;" + " width: 100%;" + "}" + "#employees td, #employees th {" + " border: 0px solid #ddd;" + " padding: 8px;" + "}" + "#employees tr:nth-child(even){background-color: #d4e6f1;}" + "#employees tr:hover {background-color: #ddd;}" + "#employees th {" + " padding-top: 12px;" + " padding-bottom: 12px;" + " text-align: left;" + " background-color: #2980b9;" + " color: white;" + "}" + "</style>" + "</head>" + "<body>" + TTAG + "</body>" + "</html>"; const string tableHead = "<h1>Employees</h1>"; const string tableFmt = "<table id='employees'>" + " <thead>" + " <th>Name</th>" + " <th>Address</th>" + " <th>Country</th>" + " </thead>" + "{0}" + "</table>"; const string dataRowFmt = " <tr>" + " <td>{0}</td>" + " <td>{1}</td>" + " <td>{2}</td>" + " </tr>"; // Create a new PDF document: var doc = new GcPdfDocument(); // Add a page: var page = doc.NewPage(); // Get page graphics: var g = page.Graphics; var nrc = Common.Util.AddNote( "Here we build an HTML table with data fetched from an XML database, " + "and insert it into the current PDF page. " + "A footer is added below the table based on the rendered table size " + "returned by the GcPdfGraphics.DrawHtml() method.", page); // Get employees data from the sample NorthWind database: using (var ds = new DataSet()) { ds.ReadXml(Path.Combine("Resources", "data", "DsNWind.xml")); DataTable dtEmps = ds.Tables["Employees"]; var emps = from emp in dtEmps.Select() orderby emp["LastName"] select new { Name = emp["LastName"] + ", " + emp["FirstName"], Address = emp["Address"], Country = emp["Country"] }; // Build the HTML table: var sb = new StringBuilder(); sb.AppendLine(tableHead); foreach (var emp in emps) sb.AppendFormat(dataRowFmt, emp.Name, emp.Address, emp.Country); var html = tableTpl.Replace(TTAG, string.Format(tableFmt, sb.ToString())); // Create an instance of GcHtmlBrowser that is used to render HTML: using var browser = Common.Util.NewHtmlBrowser(); // Render HTML. // The return value indicates whether anything has been rendered. // The output parameter size returns the actual size of the rendered content: var ok = g.DrawHtml(browser, html, nrc.Left, nrc.Bottom + 36, new HtmlToPdfFormat(false) { MaxPageWidth = nrc.Width / 72 }, out SizeF size); Common.Util.AddNote( "This text is added below the HTML table. Its position is determined " + "by the rendered size returned by GcPdfGraphics.DrawHtml().", page, new RectangleF(nrc.Left, nrc.Bottom + size.Height + 72, nrc.Width, int.MaxValue)); } // Done. doc.Save(stream); return doc.Pages.Count; } } }