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