这篇文章主要介绍了C# 如何使用 WebBrowser 实现 HTML 转图片功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
在 .NET 平台上,我们有多种方式可以将一段 HTML 文本转换为一张图片:HTML Renderer、SelectPdf 、Aspose.Html 等。
在 WinForm 程序中,每一个 System.Windows.Forms.Control 的派生类型均包含一个名为 DrawToBitmap 的方法,该方法可以将控件绘制到一张图片上。WebBrowser 具备显示 HTML 的功能,又因为其从 Control 类型派生,所以包含 DrawToBitmap 方法。我们只需将要在 WebBrowser 上加载要展示的 HTML 并在其 DocumentCompleted 事件中绘制图片即可:
public static async Task<Image> HtmlToImage(String html, int width = 1024, int height = 768)
{
var taskCompletionSource = new TaskCompletionSource<Image>();
var thread = new Thread(() =>
{
using var browser = new WebBrowser
{
Width = width,
Height = height,
ScrollBarsEnabled = false
};
browser.DocumentCompleted += (s, e) =>
{
var b = s as WebBrowser;
if (b == null)
{
return;
}
var bmp = new Bitmap(b.Width, b.Height);
b.DrawToBitmap(bmp, new Rectangle(0, 0, b.Width, b.Height));
taskCompletionSource.SetResult(bmp);
Application.ExitThread();
};
browser.DocumentText = html;
Application.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
return await taskCompletionSource.Task;
}
以上代码参考了:Stack Overflow ,笔者将其改造为异步方法并增加了必要的释放功能。在 LINQPad 中测试效果如下:
该方式的优点:
- 简单易用。
- 支持最新的 .NET Core 环境。
- 无需引用第三方类库,没有版权和安全性风险,安全且免费。
- 支持从互联网上加载内容。
该方式的缺点:
- 虽然支持 .NET Core ,但以上代码不能跨平台使用。
- WebBrowser 控件基于 IE 浏览器并受宿主操作系统影响,要求被呈现的网页具备较高的兼容性。
使用 IE8+ 版本进行渲染
笔者在实际工作中使用到了部分 CSS3 属性,默认情况下 WebBrowser 使用低版本的 IE 浏览器渲染网页,这会导致部分网页效果不生效,比如隔行变色效果。除了修改注册表,我们仍可以通过在网页中加入 meta 标签的方式告知 WebBrowser 使用高版本的 IE 浏览器进行渲染,仅需将以下代码复制至 HTML 的 head 标签内即可:
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
以上就是C# 使用 WebBrowser 实现 HTML 转图片功能的实例代码的详细内容,更多关于C# WebBrowser 实现 HTML 转图片的资料请关注得得之家其它相关文章!
本文标题为:C# 使用 WebBrowser 实现 HTML 转图片功能的示例代码


基础教程推荐
- Unity shader实现高斯模糊效果 2023-01-16
- C#获取指定目录下某种格式文件集并备份到指定文件夹 2023-05-30
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16
- C#中的Linq to JSON操作详解 2023-06-08
- C#调用摄像头实现拍照功能的示例代码 2023-03-09
- C# 解析XML和反序列化的示例 2023-04-14
- c# – USING块在网站与Windows窗体中的行为不同 2023-09-20
- Unity 如何获取鼠标停留位置下的物体 2023-04-10
- C#中 Json 序列化去掉null值的方法 2022-11-18
- 实例详解C#实现http不同方法的请求 2022-12-26