C# 使用 WebBrowser 实现 HTML 转图片功能的示例代码

所属分类: 软件编程 / C#教程 阅读数: 125
收藏 0 赞 0 分享

在 .NET 平台上,我们有多种方式可以将一段 HTML 文本转换为一张图片:HTML RendererSelectPdfAspose.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 中测试效果如下:

该方式的优点:

  1. 简单易用。
  2. 支持最新的 .NET Core 环境。
  3. 无需引用第三方类库,没有版权和安全性风险,安全且免费。
  4. 支持从互联网上加载内容。

该方式的缺点:

  1. 虽然支持 .NET Core ,但以上代码不能跨平台使用。
  2. 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#开发word批量转pdf源码分享

已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF,看下面的实例源码吧
收藏 0 赞 0 分享

c# xml API操作的小例子

这篇文章主要介绍了c# xml API操作的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

c#唯一值渲染实例代码

这篇文章主要介绍了c#唯一值渲染实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

淘宝IP地址库采集器c#代码

这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C#在后台运行操作(BackgroundWorker用法)示例分享

BackgroundWorker类允许在单独的专用线程上运行操作。如果需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用BackgroundWorker类方便地解决问题,下面看示例
收藏 0 赞 0 分享

c#文本加密程序代码示例

这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
收藏 0 赞 0 分享

c#生成站点地图(SiteMapPath)文件示例程序

这篇文章主要介绍了c#生成站点地图(SiteMapPath)文件的示例,大家参考使用
收藏 0 赞 0 分享

C# 键盘Enter键取代Tab键实现代码

这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C# WinForm导出Excel方法介绍

在.NET应用中,导出Excel是很常见的需求,导出Excel报表大致有以下三种方式:Office PIA,文件流和NPOI开源库,本文只介绍前两种方式
收藏 0 赞 0 分享

C#串口通信程序实例详解

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
收藏 0 赞 0 分享
查看更多