c# html转换图片格式,C#使用WebBrowser实现HTML转图片功能的方法

C#使用WebBrowser实现HTML转图片功能的方法

发布时间:2020-07-06 13:46:02

来源:亿速云

阅读:381

作者:清晨

小编给大家分享一下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 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;

}

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

0f28abf0915c5042d4c5cccc2a94925d.png

该方式的优点:简单易用。

支持最新的 .NET Core 环境。

无需引用第三方类库,没有版权和安全性风险,安全且免费。

支持从互联网上加载内容。

该方式的缺点:虽然支持 .NET Core ,但以上代码不能跨平台使用。

WebBrowser 控件基于 IE 浏览器并受宿主操作系统影响,要求被呈现的网页具备较高的兼容性。

使用 IE8+ 版本进行渲染

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

看完了这篇文章,相信你对C#使用WebBrowser实现HTML转图片功能的方法有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值