HelloWorldHtml.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 GrapeCity.Documents.Pdf; using GrapeCity.Documents.Text; using GrapeCity.Documents.Html; namespace DsPdfWeb.Demos { // This sample shows how to render an HTML string. // // Adding DsHtml to your projects: // - Public classes and extension methods that enable rendering HTML // are provided by the GrapeCity.Documents.Html (DsHtml) package. // - DsHtml supports Windows, macOS and Linux platforms. // // Dealing with errors when using DsHtml: // - If DsHtml is not doing what you expect (e.g. rendering HTML to PDF // produces an invalid PDF), check the content of the string property // GcHtmlBrowser.ErrorLog after the call to SaveAsPdf returns, // it may explain why the error occurred. // // DsHtml uses a local copy of a Chromium-based browser. // You can either rely on Google Chrome or Microsoft Edge browsers // installed in the operating system, or download an instance of // the Chromium browser to the application's local folder or some shared folder. // If you know the custom path to an installed Chromium-based browser, // use it instead of the above-mentioned options. // The BrowserFetcher class can be used to install or fetch an already // installed browser, you can then use the BrowserFetcher.GetDownloadedPath() // to get the path to the browser. See the BrowserFetcher class for methods // retrieving the path to Chrome or Edge executables and for other // options and methods that help to download Chromium browser // to a local folder if necessary. // // See the Util.NewHtmlBrowser() utility method used by this sample for a // implementation example. // // The above notes apply to any project that uses DsHtml. public class HelloWorldHtml { public int CreatePDF(Stream stream) { // HTML code that represents the content to render: var html = "<!DOCTYPE html>" + "<html>" + "<head>" + "<style>" + "span.bold {" + " font-weight: bold;" + "}" + "p.round {" + " font: 36px arial, sans-serif;" + " color: DarkSlateBlue;" + " border: 4px solid SlateBlue;" + " border-radius: 16px;" + " padding: 3px 5px 3px 5px;" + " text-shadow: 3px 2px LightSkyBlue;" + "}" + "p.note {" + " font: 16px arial, sans-serif;" + " color: DarkSlateBlue;" + "}" + "</style>" + "</head>" + "<body>" + "<p class='round'>Hello, World, from <span class='bold'>DsHtml</span>!</p>" + "<p class='note'>This demo shows how to use <strong>DsHtml</strong> to render HTML to PDF or images." + "Check out the source code of this demo for details on how to configure and use <strong>DsHtml</strong>.</p>" + "</body>"; // Create a new PDF document, add a page, get graphics to draw on: var doc = new GcPdfDocument(); var page = doc.NewPage(); var g = page.Graphics; try { // Create an instance of GcHtmlBrowser that is used to render HTML: using var browser = Common.Util.NewHtmlBrowser(); // Render HTML. // The return value from DrawHtml() indicates whether anything has been rendered. // The output parameter 'size' returns the actual size of the rendered content. var ok = g.DrawHtml(browser, html, 72, 72, new HtmlToPdfFormat(false) { MaxPageWidth = 6.5f, MaxPageHeight = 9f }, out SizeF size); if (ok) { // If anything has been rendered, draw an extra border around the rendered content: var rc = new RectangleF(72 - 4, 72 - 4, size.Width + 8, size.Height + 8); g.DrawRoundRect(rc, 8, Color.PaleVioletRed); } else if (!string.IsNullOrEmpty(browser.ErrorLog)) { // Optional diagnostics that may be useful when diagnosing browser errors. // Note that the error log may contain harmless information messages // even if there were no errors, so testing whether the error log is empty // should not be used as the error indicator. Common.Util.AddNote(browser.ErrorLog, page, new RectangleF(72, 72 + size.Height + 36, page.Size.Width - 144, page.Size.Height - size.Height - 108)); } } catch (Exception ex) { throw new Exception($"Error:\n{ex.Message}"); } // Done: doc.Save(stream); return doc.Pages.Count; } } }