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