将 ASP.NET MVC ViewResult HTML 渲染为图像,无需第三方组件

2024-01-11

有没有办法将 ViewResult 或 PartialViewResult 渲染为图像?

我尝试将 ViewResult 作为字符串获取,并且得到了一个包含 html 的字符串,但我需要将该 html 渲染为图像。如果可能的话 - 带样式和图像。

我有一个想法,在服务器上获取此 html 的一些浏览器输出并将结果捕获到图像中,但目前我不知道在实践中如何实现。 如果您有任何想法,请帮忙。

请不要建议任何第三方组件。只需判断标准 .NET 类是否无法做到这一点即可。

谢谢


See 如何使用 WebBrowser 控件呈现图像 http://code.msdn.microsoft.com/windowsdesktop/How-to-render-or-convert-7064e4e2

public class HtmlToBitmapConverter 
{ 
    private const int SleepTimeMiliseconds = 5000; 

    public Bitmap Render(string html, Size size) 
    { 
        var browser = CreateBrowser(size); 

        browser.Navigate("about:blank"); 
        browser.Document.Write(html); 

        return GetBitmapFromControl(browser, size); 
    } 

    public Bitmap Render(Uri uri, Size size) 
    { 
        var browser = CreateBrowser(size); 

        NavigateAndWaitForLoad(browser, uri, 0); 

        return GetBitmapFromControl(browser, size); 
    } 

    public void NavigateAndWaitForLoad(WebBrowser browser, Uri uri, int waitTime) 
    { 
        browser.Navigate(uri); 
        var count = 0; 

        while (browser.ReadyState != WebBrowserReadyState.Complete) 
        { 
            Thread.Sleep(SleepTimeMiliseconds); 

            Application.DoEvents(); 
            count++; 

            if (count > waitTime / SleepTimeMiliseconds) 
            { 
                break; 
            } 
        } 
    } 

    private WebBrowser CreateBrowser(Size size) 
    { 
        return 
            new WebBrowser 
            { 
                ScrollBarsEnabled = false, 
                ScriptErrorsSuppressed = true, 
                Size = size 
            }; 
    } 

    private Bitmap GetBitmapFromControl(WebBrowser browser, Size size) 
    { 
        var bitmap = new Bitmap(size.Width, size.Height); 

        NativeMethods.GetImage(browser.Document.DomDocument, bitmap, Color.White); 
        return bitmap; 
    } 
}

然后就很简单了

var image = new HtmlToBitmapConverter()
                .Render(new Uri(urlTextBox.Text), pictureBox.Size);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 ASP.NET MVC ViewResult HTML 渲染为图像,无需第三方组件 的相关文章

随机推荐

  • SQL Server 数据库字段处理韩文和中文字符

    SQL Server中是否有可能有一个字段可以存储中文 韩文和欧洲字符 我的汉字就变成了 数据类型是NVARCHAR以及 NVARCHAR是正确的类型 它将所有内容存储在 2 字节 Unicode 中 与您合作时需要注意的是NVARCHAR
  • Oracle SQL 语句动态模式变量

    我有数百行代码来创建表 但模式名称是硬编码的 如所有 DDL 语句中的 SCHEMA NAME1 TABLE NAME 我怎样才能将其作为变量并在所有地方使用 以便我们可以轻松地在一个地方更改 SCHEMA NAME 要求的多个位置 请给出
  • jquery 模式对话框 onclick?

    我要这个 http jqueryui com demos dialog modal message http jqueryui com demos dialog modal message 当您单击 ClickMe 时发生 这个怎么做 di
  • Firebase 数据库和应用本地化

    我正在为 iOS 和 Android 平台构建一个问答游戏 我希望能够处理本地化 我正在使用 Firebase 的实时数据库解决方案来解决游戏中存在的所有问题 我将问题硬编码到 Firebase 的数据库中 每个问题对象都有 2 个参数 I
  • 基于多个切片器值 Power BI 显示用户计数

    我正在研究一个Viewership table它告诉客户手表资产的数量 有两个资产过滤器 一种用于观看 另一种用于未观看 根据资产过滤器 我需要显示观看节目的客户数量和未观看节目的客户数量 下面是我用过的方法 首先 创建一个新表 Asset
  • 用 Fortran 编写矩阵

    我需要用 FORTRAN 输出一个矩阵 我有一个计算值的工作代码 但我得到的不是矩阵 而是一列 矩阵很大 ixj 2000x2000 这是我的示例代码 open 19 file results1 txt status old positio
  • firestore 是否已删除单个文档每秒写入 1 次的软限制?

    Firestore 始终对单个文档有每秒 1 次写入的软限制 这意味着 对于诸如每秒更新一次以上的计数器之类的事情 推荐的解决方案是分片计数器 看着Firestore 限制文档 https firebase google com docs
  • 使用 ASP.NET MVC 上传图像

    我需要上传图像作为 MVC 应用程序中创建操作的一部分 图像将存储在文件服务器中 数据库将包含该图像的路径 我计划使用以下标签来获取文件 gt
  • 如何将 2 个图像附加到布局底部

    我想附上2张图片 第一个位于左下角 其他位于右下角 但我希望这些图像在底部是核心的 这样如果我滚动页面 图像应该保留在同一位置 动态地 我成功地回答了我自己的问题 所以我特此为所有用户提供代码 它可以工作 所以拥有代码并享受 LinearL
  • Ionic 2 - Angular 2 http 标头未随请求一起发送

    我正在使用 Ionic 的最新测试版本 并且我已经为我的 api 服务器完成了 http post 方法 但标头不会随请求一起发送 我使用的代码如下 Ionic 版本 Beta 8 和 Angular 版本 rc 3 import Page
  • 将 UTF-8 字符串拆分为块

    我想将 UTF 8 字符串拆分为大小相等的块 我想出了一个解决方案 正是这样做的 现在我想简化它 如果可能的话 删除第一个收集调用 有办法做到吗 fn main let strings chars collect
  • Flask 中 return render_template 和 jinja 模板之间的区别

    我见过两种在 Flask 中路由 HTML 页面的方法 要么像这样声明一个名为 template 的变量 def home template jinja env get template hello form html return tem
  • 严格模式下不允许使用八进制文字

    我正在使用 Angular 2 当我在 SCSS 文件中使用它时 效果很好 text after content 00a0 00a0 然而 当我把它搬进去时 styles 表明 未捕获的语法错误 严格模式下不允许使用八进制文字 我知道代码s
  • 从数组 javascript 中删除元素(相反交集)

    昨天晚上我提出了这个问题从数组javascript中删除元素 https stackoverflow com questions 29711165 delete elements from array javascript但我错误地认为 我
  • 渲染与部分渲染和良率之间的差异

    我已经从 Rails 指南中读到了它 已经看过 Micheal Hartel 的书 现在又从 Rails View 的书中读到了它 但我仍然感到困惑 有一个 footer html erb文件 因此它是一个 部分 并且在它编写的代码中 所以
  • C 中指向二维数组的指针

    我知道有几个关于提供良好 和有效 解决方案的问题 但恕我直言 没有一个问题清楚地说明实现这一目标的最佳方法是什么 所以 假设我们有一些二维数组 int tab1 100 280 我们想要创建一个指向这个二维数组的指针 为了实现这一目标 我们
  • iOS - 将 NSDictionary 写入 Localized.strings

    这个问题是那个问题的连续体 iOS 我可以在运行时更改 localized strings 内容吗 https stackoverflow com questions 13625008 ios could i change the loca
  • 手工制作的强类型 ADO.net 数据表 - 它可以更干净吗?

    我最近遇到一个非常简单的类型化数据表 不使用 XSD 我丢失了作者的 URL 所以我不能相信他 但看起来有很多重复的代码 例如添加 删除 GetNewRow 方法 我尝试将重复的方法推入超类中 但由于 Employee 需要通用 因此出现了
  • 为什么 F# printfn 没有通过 Console.WriteLine 实现?

    我注意到使用 F printfn 时出现意外行为 它似乎将格式字符串分解为块 并为每次调用 printfn 多次调用 Console Write 我希望它格式化整个字符串 然后调用 Console WriteLine 一次 我注意到这一点是
  • 将 ASP.NET MVC ViewResult HTML 渲染为图像,无需第三方组件

    有没有办法将 ViewResult 或 PartialViewResult 渲染为图像 我尝试将 ViewResult 作为字符串获取 并且得到了一个包含 html 的字符串 但我需要将该 html 渲染为图像 如果可能的话 带样式和图像