c# html转为图片,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 中测试效果如下:

f384c03f4dcf52fcf1690ab6a436f93c.png

该方式的优点:

简单易用。

支持最新的 .NET Core 环境。

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

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

该方式的缺点:

虽然支持 .NET Core ,但以上代码不能跨平台使用。

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

使用 IE8+ 版本进行渲染

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

以上就是C# 使用 WebBrowser 实现 HTML 转图片功能的实例代码的详细内容,更多关于C# WebBrowser 实现 HTML 转图片的资料请关注脚本之家其它相关文章!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java的string访问某个元素_CSS伪类与伪元素总是傻傻分不清,这份总结够面试用了

熟悉前端的人都会听过 css 的伪类与伪元素,然而大多数的人都会将这两者混淆。本文从解析伪类与伪元素的含义出发,区分这两者的区别,并且列出大部分伪类与伪元素的具体用法,即使你有用过伪类与伪元素,但里面总有一两个你…

android平板 深度学习,这款叫Remix的设备,或许可以拯救安卓平板

(图片来自于魏布斯评测视频“Remix平板上手使用体验”)现今平板市场,已呈现出苹果谷歌微软三分天下之势。然而,相较于其他两者,安卓平板却并面临着严重的危机,即便自2013年第三季度,安卓平板便已超越iPad成为市场份额的…

IE8下强制浏览器用哪个IE版本渲染页面

在head中加入<meta http-equiv"X-UA-Compatible" content"IEEmulateIE10"/> 转载于:https://www.cnblogs.com/lansetuerqi/p/8288900.html

华为swot分析2020_科技口译现场:华为2020全球分析师大会

华为第17届全球分析师大会2020年5月18-20日在中国深圳举办&#xff0c;本次大会期间&#xff0c;将分享华为对于全球化合作的思考&#xff0c;如何发挥ICT技术价值应对未来世界的不确定性&#xff1b;如何持续创新为人类社会进步做贡献&#xff1b;如何推动产业发展和生态建设&…

python导出数据找不到csv_【记录】使用Python读取/导出(写入)CSV文件

想要用python处理csv文件。 去查了下&#xff0c;python中本身就自带csv模块。 然后参考在线手册&#xff1a; 去试试。 【用python生成csv】 1. 按照手册的例子&#xff0c;试了试&#xff1a;import csv with open(eggs.csv, wb) as csvfile: spamwriter csv.writer(csvfile…

网段划分

IPv4地址分为A、B、C、D、E五类&#xff0c;出去特殊作用的D、E两类&#xff0c;剩下的A、B、C三类地址是我们常见的IP地址段。A类地址的容量最大&#xff0c;可以容纳16777214个主机&#xff0c;B类地址可以容纳65534个主机&#xff0c;C类地址可以容纳254个主机。在这三类地址…

html5同心圆代码,HTML5/Canvas 鼠标跟随的同心圆

JavaScript语言&#xff1a;JaveScriptBabelCoffeeScript确定(function() {this.Easing (function() {function Easing() {}Easing.easeOutCubic function(t) {return 4 * t * t * t;};Easing.easeInOutCubic function(t) {if (t < .5) {return 4 * t * t * t;} else {re…

mips汇编计算开方_读美国伊利诺伊理工大学计算机科学硕士能学到什么?

最近有很多计算机专业的大学生和程序员、工程师等在职人士&#xff0c;向彼岸教育咨询美国伊利诺伊理工大学的计算机硕士项目&#xff0c;想更多地了解课程和教学内容。彼岸教育从伊利诺伊理工大学计算机科学系要来了一份近期学校的安排的部分课程大纲&#xff0c;包括教师背景…

mac os x10.9.2 查看进程对应端口

以前在Ubuntu上&#xff0c;直接sudo netstat -nap 但是在mac 上这个命令还跑不通&#xff0c;sudo netstat -nap tcp 才行&#xff0c;结果还没有进程号。用lsof -Pn 解决了转载于:https://www.cnblogs.com/xiaoleiel/p/8295333.html

html iframe php,html iframe使用的实战总结分享

说在前面的话&#xff0c;iframe是可以做很多事情的。例如&#xff1a;a>通过iframe实现跨域;b>使用iframe解决IE6下select遮挡不住的问题c>通过iframe解决Ajax的前进后退问题d>通过iframe实现异步上传。(Easyui中form组件就是用的iframe&#xff0c;实现表单提交时…

环形队列出队的元素怎么输出出来_队列的知识讲解与基本实现(数据结构)

引言中午在食堂打饭&#xff0c;真是一个令人头疼的事情&#xff0c;去食堂的路上也总是步伐匆匆&#xff0c;为什么啊&#xff0c;这还用说&#xff0c;迟一点去&#xff0c;你就会知道什么叫做人山人海了&#xff0c;在食堂排队的时候&#xff0c;相比较学生来说&#xff0c;…

$compile 手动编译

angularjs里比较重要但又很少手动调用的要属$compile服务了&#xff0c;通常在写组件或指令时&#xff0c;都是angularjs自动编译完成的&#xff0c;但有时我们可能需要手动编译&#xff0c;比如封装一个table组件&#xff0c;根据参数实现自定义渲染&#xff0c;增加一列复选框…

计算机excel知识点一级,2012年计算机一级考试高分必看知识点:EXCEL

EXCEL1、 插入新工作表&#xff0c;更改工作表名单击“插入/工作表”,即可插入新工作表&#xff0c;工作表名为sheet编号指向某张工作表处&#xff0c;双击鼠标左键&#xff0c;输入新工作表名即可修改工作表名2、 设置某列数据保留小数位数为2位选择该列所有有效数据后&#x…

c++ 不插入重复元素但也不排序_【每日一题】125. 对链表进行插入排序

关注我们获取更多计算机考研信息对链表进行插入&#xff0c;插入排序算法&#xff1a;插入排序是迭代的&#xff0c;每次只移动一个元素&#xff0c;直到所有元素可以形成一个有序的输出列表。每次迭代中&#xff0c;插入排序只从输入数据中移除一个待排序的元素&#xff0c;找…

HA架构

HA架构是个什么东西&#xff1f; 阅读文章&#xff1a;浅谈web应用的负载均衡、集群、高可用(HA)解决方案转载于:https://www.cnblogs.com/Tpf386/p/8297744.html

怎么检查计算机网络是连接,怎么检测网络打印机是否与电脑连接成功【检测方法】...

想必不少宝宝和以前的小编一样&#xff0c;在用网络打印机的时候&#xff0c;有时候能打印&#xff0c;有时候却打印不了。那么如何 检测网络打印机是否与电脑连接成功?跟随小编往下看。系统反反复复告知“无法打印”&#xff0c;让工作本已繁忙的小修近乎奔溃! 那么&#xff…

python画菱形的代码_python绘制菱形

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01;首先&#xff0c;将数据读入到python中&#xff0c;并绘制出生率和死亡率数据的散点图&#xff0c;代码如下&…

正则表达式小应用之对xml格式字符串每个字段加双引号

通过Python对接口进行自动化后需要把xml格式的报文放到LoadRunner上进行压力测试&#xff0c;在pyCharm控制台打印出报文后&#xff0c;把报文放到LoadRunner中做了格式调整后&#xff0c;每个字段需要添加双引号。手动给每一行的字段添加双引号太费时费力&#xff0c;利用UE也…

python爬虫数据可视化_python 爬虫与数据可视化--python基础知识

摘要&#xff1a;偶然机会接触到python语音&#xff0c;感觉语法简单、功能强大&#xff0c;刚好朋友分享了一个网课《python 爬虫与数据可视化》&#xff0c;于是在工作与闲暇时间学习起来&#xff0c;并做如下课程笔记整理&#xff0c;整体大概分为4个部分&#xff08;1.pyth…

计算机实物知识需求市场调研,能力本位计算机维护论文

能力本位计算机维护论文1课程教学现状对于计算机专业学生来说&#xff0c;学会组装计算机系统&#xff0c;分析和解决计算机常见故障是计算机专业学生必须掌握的一项技能&#xff0c;学好本课程对将来就业有很大的帮助。然而&#xff0c;随着计算机技术的快速发展&#xff0c;本…