HelloWorldHtml.cs
// 完毕:
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Html;

namespace DsPdfWeb.Demos
{
    // 此示例演示如何呈现硬编码的 HTML 字符串。
    // 
    // 将 GcDocs.Html 添加到您的项目中:
    // - 支持渲染 HTML 的公共类和扩展方法
    //   由 GrapeCity.Documents.Html (GcDocs.Html) 包提供。
    // - GcDocs.Html 支持 Windows、macOS 和 Linux 平台。
    // 
    // 使用 GcDocs.Html 时处理错误:
    // - 如果 GcDocs.Html 没有达到您的预期(例如将 HTML 渲染为 PDF)
    //   生成无效的 PDF),检查字符串属性的内容
    //   调用 SaveAsPdf 返回后的 GcHtmlBrowser.ErrorLog,
    //   它可以解释错误发生的原因。
    // 
    // 上述注释适用于任何使用 GcDocs.Html 的项目。
    public class HelloWorldHtml
    {
        public int CreatePDF(Stream stream)
        {
            // 表示要呈现的内容的 HTML 代码:
            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;" +
                "}" +
                "</style>" +
                "</head>" +
                "<body>" +
                "<p class='round'>Hello, World, from <span class='bold'>DsHtml</span>!</p>" +
                "</body>" +
                "</html>";

            // 创建一个新的 PDF 文档,添加页面,获取要绘制的图形:
            var doc = new GcPdfDocument();
            var page = doc.NewPage();
            var g = page.Graphics;

            try
            {
                // 创建一个用于呈现 HTML 的 GcHtmlBrowser 实例:
                using var browser = Common.Util.NewHtmlBrowser();

                // 渲染 HTML。
                // DrawHtml() 的返回值指示是否已呈现任何内容。
                // 输出参数“size”返回渲染内容的实际大小。
                var ok = g.DrawHtml(browser, html, 72, 72,
                    new HtmlToPdfFormat(false) { MaxPageWidth = 6.5f, MaxPageHeight = 9f },
                    out SizeF size);

                if (ok)
                {
                    // 如果已渲染任何内容,请在渲染内容周围绘制额外的边框:
                    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))
                {
                    // 诊断浏览器错误时可能有用的可选诊断。
                    // 请注意,错误日志可能包含无害的信息消息
                    // 即使没有错误,所以测试错误日志是否为空
                    // 不应该被用作错误指示器。
                    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}");
            }

            // 完毕:
            doc.Save(stream);
            return doc.Pages.Count;
        }
    }
}