ProductList.vb
- ''
- '' This code is part of Document Solutions for PDF demos.
- '' Copyright (c) MESCIUS inc. All rights reserved.
- ''
- Imports System.IO
- Imports System.Drawing
- Imports System.Text
- Imports System.Data
- Imports System.Linq
- Imports System.Collections.Generic
- Imports GrapeCity.Documents.Pdf
- Imports GrapeCity.Documents.Text
- Imports GrapeCity.Documents.Html
-
- '' This sample shows how to render a report (the list of products
- '' from the standard NWind sample database) using an HTML string
- '' as a template. The report is created by looping over the data records
- '' and building up the resulting HTML from table row template filled with
- '' the actual data. The generated HTML string is then passed to GcHtmlRenderer
- '' to create the PDF.
- ''
- '' Please see notes in comments at the top of HelloWorldHtml
- '' sample code for details on adding DsHtml to your projects.
- Public Class ProductList
- Sub CreatePDF(ByVal stream As Stream)
- Const TTAG = "___TABLE___"
-
- '' HTML page template:
- Const tableTpl =
- "<!DOCTYPE html>" +
- "<html>" +
- "<head>" +
- "<style>" +
- "" +
- "html * {" +
- " font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif !important;" +
- "}" +
- "" +
- "h1 {" +
- " color: #1a5276;" +
- " background-color: #d2b4de;" +
- " text-align: center;" +
- " padding: 6px;" +
- "}" +
- "" +
- "thead {display: table-header-group;}" +
- "" +
- "#products {" +
- " font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif;" +
- " border-collapse: collapse;" +
- " width: 100%;" +
- "}" +
- "" +
- "#products td, #products th {" +
- " border: 1px solid #ddd;" +
- " padding: 8px;" +
- "}" +
- "" +
- "#products tr:nth-child(even){background-color: #f2f2f2;}" +
- "" +
- "#products tr:hover {background-color: #ddd;}" +
- "" +
- "#products th {" +
- " padding-top: 12px;" +
- " padding-bottom: 12px;" +
- " text-align: left;" +
- " background-color: #a569bd;" +
- " color: white;" +
- "}" +
- "</style>" +
- "</head>" +
- "<body>" +
- "" +
- TTAG +
- "" +
- "</body>" +
- "</html>"
-
- Const tableHead = "<h1>Product Price List</h1>"
-
- Const tableFmt =
- "<table id='products'>" +
- " <thead>" +
- " <th>Product ID</th>" +
- " <th>Description</th>" +
- " <th>Supplier</th>" +
- " <th>Quantity Per Unit</th>" +
- " <th>Unit Price</th>" +
- " </thead>" +
- "{0}" +
- "</table>"
-
- Const dataRowFmt =
- " <tr>" +
- " <td>{0}</td>" +
- " <td>{1}</td>" +
- " <td>{2}</td>" +
- " <td>{3}</td>" +
- " <td align='right'>{4:C}</td>" +
- " </tr>"
-
- Using ds = New DataSet()
- ds.ReadXml(Path.Combine("Resources", "data", "DsNWind.xml"))
-
- Dim dtProds = ds.Tables("Products")
- Dim dtSupps = ds.Tables("Suppliers")
-
- Dim products =
- From prod In dtProds.Select()
- Join supp In dtSupps.Select()
- On prod("SupplierID") Equals supp("SupplierID")
- Order By prod("ProductName")
- Select New With {
- .ProductID = prod("ProductID"),
- .ProductName = prod("ProductName"),
- .Supplier = supp("CompanyName"),
- .QuantityPerUnit = prod("QuantityPerUnit"),
- .UnitPrice = prod("UnitPrice")
- }
-
- Dim sb = New StringBuilder()
- sb.AppendLine(tableHead)
- For Each prod In products
- sb.AppendFormat(dataRowFmt, prod.ProductID, prod.ProductName, prod.Supplier, prod.QuantityPerUnit, prod.UnitPrice)
- Next
-
- Dim html = tableTpl.Replace(TTAG, String.Format(tableFmt, sb.ToString()))
- Dim tmp = Path.GetTempFileName()
- '' Create an instance of GcHtmlBrowser that is used to render HTML:
- Using browser = Util.NewHtmlBrowser()
- '' PdfSettings specifies options for HTML to PDF conversion:
- Dim pdfOptions = New PdfOptions() With {
- .Margins = New PdfMargins(0.2F, 1, 0.2F, 1),
- .DisplayHeaderFooter = True,
- .HeaderTemplate = "<div style='color:#1a5276; font-size:12px; width:1000px; margin-left:0.2in; margin-right:0.2in'>" +
- "<span style='float:left;'>Product Price List</span>" +
- "<span style='float:right'>Page <span class='pageNumber'></span> of <span class='totalPages'></span></span>" +
- "</div>",
- .FooterTemplate = "<div style='color: #1a5276; font-size:12em; width:1000px; margin-left:0.2in; margin-right:0.2in;'>" +
- "<span>(c) MESCIUS inc. All Rights Reserved.</span>" +
- "<span style='float:right'>Generated on <span class='date'></span></span></div>"
- }
- '' Render the source Web page to the temporary file:
- Using htmlPage = browser.NewPage(html)
- htmlPage.SaveAsPdf(tmp, pdfOptions)
- End Using
- End Using
- '' Copy the created PDF from the temp file to target stream:
- Using ts = File.OpenRead(tmp)
- ts.CopyTo(stream)
- End Using
- '' Clean up:
- File.Delete(tmp)
- End Using
- '' Done.
- End Sub
- End Class
-