博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 使用 WebBrowser 实现 HTML 转图片功能
阅读量:3963 次
发布时间:2019-05-24

本文共 1362 字,大约阅读时间需要 4 分钟。

在 .NET 平台上,我们有多种方式可以将一段 HTML 文本转换为一张图片:、、 等。

在 WinForm 程序中,每一个 System.Windows.Forms.Control 的派生类型均包含一个名为 DrawToBitmap 的方法,该方法可以将控件绘制到一张图片上。WebBrowser 具备显示 HTML 的功能,又因为其从 Control 类型派生,所以包含 DrawToBitmap 方法。我们只需将要在 WebBrowser 上加载要展示的 HTML 并在其 DocumentCompleted 事件中绘制图片即可:

public static async Task HtmlToImage(String html, int width = 1024, int height = 768) { var taskCompletionSource = new TaskCompletionSource(); 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; }

以上代码参考了:  ,将其改造为异步方法并增加了必要的释放功能。在 LINQPad 中测试效果如下:

该方式的优点:

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

该方式的缺点:

  1. 虽然支持 .NET Core ,但以上代码不能跨平台使用。
  2. WebBrowser 控件基于 IE 浏览器并受宿主操作系统影响,要求被呈现的网页具备较高的兼容性。

使用 IE8+ 版本进行渲染

笔者在实际工作中使用到了部分 CSS3 属性,默认情况下 WebBrowser 使用低版本的 IE 浏览器渲染网页,这会导致部分网页效果不生效,比如隔行变色效果。除了修改注册表,我们仍可以通过在网页中加入 meta 标签的方式告知 WebBrowser 使用高版本的 IE 浏览器进行渲染,仅需将以下代码复制至 HTML 的 head 标签内即可:

 

 

转载地址:http://oduki.baihongyu.com/

你可能感兴趣的文章
Asp.Net+Jquery.Ajax详解8-核心$.ajax
查看>>
项目中一个用于导出word的方法
查看>>
测试Jsp 静态包含和动态包含
查看>>
简析几种常用的Web监听
查看>>
Web应用过滤器Fileter
查看>>
代理模式(Proxy)
查看>>
采用动态代理对事务进行封装
查看>>
Hibernate性能优化
查看>>
Spring核心ioc
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
Struts2+Spring3+Mybatis3开发环境搭建
查看>>
mongoDB入门必读(概念与实战并重)
查看>>
通俗易懂解剖jbpm4
查看>>
rsync
查看>>
makefile
查看>>
linux 文件权限
查看>>
一些比较好的golang安全项目
查看>>
HTTP状态码
查看>>
go语言
查看>>
mysql mariaDB 以及存储引擎
查看>>