//// This code is part of Document Solutions for PDF .NET demos.// Copyright (c) MESCIUS inc. All rights reserved.//usingSystem.IO;usingSystem.Data;usingSystem.Linq;usingGrapeCity.Documents.Html; namespaceDsPdfWeb.Demos{// This sample shows how to render a report (the list of products// from the standard NWind sample database) using a {{mustache}}// HTML template.//// The data query and HTML formatting are similar to those used // in the ProductList sample. Unlike that sample though, here // we use the HTML template file ProductListTemplate.html// loaded from a resource, and bind it to data using {{mustache}}.// Changing the template file (preserving the {{mustache}} bindings)// can be used to easily customize the look of the report.// // This sample uses the Stubble.Core package to bind data to the template.// // Please see notes in comments at the top of HelloWorldHtml// sample code for details on adding DsHtml to your projects.publicclassProductListTemplate {publicvoidCreatePDF(Stream stream) {usingvar ds = newDataSet();// Fetch data: ds.ReadXml(Path.Combine("Resources", "data", "DsNWind.xml")); DataTable dtProds = ds.Tables["Products"];DataTable dtSupps = ds.Tables["Suppliers"]; var products =from prod in dtProds.Select()join supp in dtSupps.Select()on prod["SupplierID"] equals supp["SupplierID"]orderby prod["ProductName"]selectnew {ProductID = prod["ProductID"],ProductName = prod["ProductName"],Supplier = supp["CompanyName"],QuantityPerUnit = prod["QuantityPerUnit"],UnitPrice = $"{prod["UnitPrice"]:C}" }; // Load the template - HTML file with {{mustache}} data references:var template = File.ReadAllText(Path.Combine("Resources", "Misc", "ProductListTemplate.html"));// Bind the template to data:var builder = newStubble.Core.Builders.StubbleBuilder();var boundTemplate = builder.Build().Render(template, new { Query = products }); // Create an instance of GcHtmlBrowser that is used to render HTML:usingvar browser = Common.Util.NewHtmlBrowser();// Render the bound HTML:usingvar htmlPage = browser.NewPage(boundTemplate);// PdfOptions specifies options for HTML to PDF conversion:var pdfOptions = newPdfOptions() {Margins = newPdfMargins(0.2f, 1, 0.2f, 1),PreferCSSPageSize = false,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 generated HTML to the temporary file:var tmp = Path.GetTempFileName(); htmlPage.SaveAsPdf(tmp, pdfOptions); // Copy the created PDF from the temp file to target stream:using (var ts = File.OpenRead(tmp)) ts.CopyTo(stream);// Clean up:File.Delete(tmp);// Done. } }}