HTML渲染库介绍

这是一个完全由托管代码编写的库,能够绘制出格式优美的HTML。它附带了三个WinForms控件:

  • HtmlPanel
  • HtmlLabel
  • HtmlTooltip

以及一个静态方法,用于绘制HTML:

C# HtmlRenderer.Render(Graphics g, string html, RectangleF area, bool clip)

注意:渲染引擎基于CSSLevel 2规范。

多年来,一直在计划这样一个项目。为此做了充分的准备。通读了CSS Level 2规范和HTML 4.01规范。

发现最有趣的一点是:绘制HTML不过是布局一堆带有边框、边距和内边距的盒子。一旦超越了这个范式,其他一切都是帮助代码将盒子放置在正确的位置,然后绘制每个盒子包含的字符串。

想象一下,在桌面应用程序中,绘制全富格式化的HTML可以为应用带来多大的力量。在需要时使用粗体,每条消息都使用斜体,以及在桌面应用程序的任何地方使用喜欢或需要的边框和字体。将首先在Ribbon项目中使用它。

尽管还没有在Mono上测试过,但应该不会有任何问题,因为库中的所有代码都是托管代码,它用于绘制的方法非常基础。它绘制线条、矩形、曲线和文本。

目前,渲染效果非常好。有时它可以让误以为正在使用一个真正的Web浏览器,相信,下载演示,它只是一个EXE和一个DLL。

使用代码

该库将代码定位在System.Drawing.Html命名空间下。渲染HTML的控件位于System.Windows.Forms命名空间下。

渲染器遵循CSS盒模型。盒模型不过是一堆盒子的树,就像HTML的树一样,每个盒子都由一个非常常用的类表示,称为CssBox。起始节点由类InitialContainer表示。

所有已知的CSS属性都适用于这些盒子。每个盒子可以包含任意数量的子盒子,只有一个父盒子。唯一一个没有父盒子的盒子就是所谓的初始容器。

使用初始容器绘制HTML的典型用法如下:

C# // 创建初始容器 InitialContainer c = new InitialContainer(""); // 给容器设置边界 c.SetBounds(ClientRectangle); // 测量树上每个盒子的边界 c.MeasureBounds(graphics); // 绘制HTML文档 c.Paint(graphics);

首先是标签,然后是面板,最后是工具提示,它们都支持HTML渲染

可能永远不需要使用它,因为提供了控件和方法来为创建这个对象。

一个面板,通过其Text属性准备好接受HTML代码。它的全名是System.Windows.Forms.HtmlPanel。

只需要知道以下属性:

  • AutoScroll:激活/停用自动滚动功能,知道的。默认设置为true。
  • Text:获取/设置HTML源。

面板会在滚动或调整控件大小时更新元素的边界。

一个标签,通过其Text属性准备好接受HTML代码。它的全名是System.Windows.Forms.HtmlLabel。

只需要知道以下属性:

  • AutoScroll:激活/停用自动滚动功能,知道的。默认设置为true。
  • AutoSize:如果激活,自动设置标签的大小。
  • Text:获取/设置HTML源。

一些有趣的事情:

  • 标签会在滚动或调整控件大小时更新元素的边界。
  • 标签可以是透明的。
  • 面板的性能比标签好。

与已经知道的ToolTip完全一样,只是这个ToolTip会渲染HTML。它的全名是System.Windows.Forms.HtmlToolTip。

这里没有要学习的属性。就像使用框架中附带的ToolTip一样使用它。在内部,它只是处理OwnerDraw事件。

几点特色

擅自添加了一些功能:

  • 背景渐变
  • 圆角

这些是通过以下CSS属性实现的:

background-gradient: (color) background-gradient-angle: (number) corner-ne-radius: (length) corner-nw-radius: (length) corner-se-radius: (length) corner-se-radius: (length) corner-radius: (length){1,4} (所有角落的简写)

渲染器目前支持的功能

大多数边框、内边距、外边距和定位CSS属性(除了height属性)

水平和垂直文本对齐,文本缩进

列表,有序和无序。高级编号尚未支持

表格,几乎所有的。单元格组合在测试过的范围内工作得很好

字体(部分)和颜色

背景(仅颜色)

有趣的点

能说什么,这是参与过的最有趣的项目之一。到目前为止,它运行得非常好,并且符合最初的设计目标。

计划给它完整的渲染支持,直到可以像一个好的Web浏览器一样可视化一个网页;为什么不,制作一个所见即所得的HTML编辑器,为应用程序提供惊人的HTML编辑能力。

还计划确保它在Mono和移动平台上运行得非常好。

在接下来的几天里,将发布一个支持的HTML标签和CSS属性的列表。

  • 2009年1月8日:首次发布
  • 2009年1月29日:修复了一些小错误
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485