时间:2021-05-19
在 .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 中测试效果如下:
该方式的优点:
该方式的缺点:
使用 IE8+ 版本进行渲染
笔者在实际工作中使用到了部分 CSS3 属性,默认情况下 WebBrowser 使用低版本的 IE 浏览器渲染网页,这会导致部分网页效果不生效,比如隔行变色效果。除了修改注册表,我们仍可以通过在网页中加入 meta 标签的方式告知 WebBrowser 使用高版本的 IE 浏览器进行渲染,仅需将以下代码复制至 HTML 的 head 标签内即可:
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>以上就是C# 使用 WebBrowser 实现 HTML 转图片功能的实例代码的详细内容,更多关于C# WebBrowser 实现 HTML 转图片的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了C#实现HTML转WORD及WORD转PDF的方法。分享给大家供大家参考。具体如下:功能:实现HTML转WORD,WORD转PDF具体代码如下:u
解决C#中WebBrowser的DocumentCompleted事件不执行的实现方法:使用WebBrowser的ProgressChanged事件,在时间中判
一、C#和JS互相调用1、js调用C#C#代码如下:webView.CoreWebView2.AddHostObjectToScript("webBrowser
C#将图片2值化示例代码,原图及二值化后的图片如下:原图:二值化后的图像:实现代码:usingSystem;usingSystem.Drawing;namesp
本文实例总结了C#的WEBBROWSER与JS交互的方法。分享给大家供大家参考。具体实现方法如下:一、实现WebBrowser内部跳转,阻止默认打开IE1、引用