如何将包含 HTML 的字符串渲染到 C# 中的图像中?

Posted

技术标签:

【中文标题】如何将包含 HTML 的字符串渲染到 C# 中的图像中?【英文标题】:How to render a string containing HTML into an image in C#? 【发布时间】:2011-10-08 22:36:03 【问题描述】:

我正在开发一个为用户提供交互式反馈工具的 Web 应用程序。在此应用程序中,用户可以单击发送反馈按钮。该按钮在他们当前的网页上放置一个覆盖,并允许他们拖动突出显示区域DIVs 以强调某些区域。一旦他们提交反馈,整个页面的 html 就会通过 AJAX 传递回服务器。

一旦在服务器上,我现在有一个包含页面 HTML 的字符串。从这里我想通过某种呈现 HTML 并构建图像的引擎运行这个字符串。如果你愿意的话,一种关于截取屏幕截图的方法。

如何才能完成这样的事情?是否有可用的引擎用 C# 编写并且可以构建 HTML 并呈现图像?

【问题讨论】:

选项 1,在此处查看 Dillie 的回答:***.com/questions/334532/render-html-as-an-image @DustinDavis 这不是网络表单控件吗?这是一个网络应用程序。 @Alex Ford,那个 HTML 字符串的 CSS 样式怎么样?你在考虑渲染纯 HTML 吗? @hamlin11 我不确定这对我有什么帮助,你能解释一下吗?她说的这个魔法密码是什么?我有点困惑。 @Tocco,好问题。我不知道该怎么做。 【参考方案1】:

看看这个框架 - http://awesomium.com/

这正是你所需要的。

设置基本 URL,这将需要解析任何相对 URL

WebCore.SetBaseDirectory("C:\\MyApplication\\MyBaseDirectory");

然后加载 HTML -

myWebView.LoadHTML("<p>Hello World!</p>");

然后使用 .Render() 方法,您就可以将渲染的内容保存到图像中。

【讨论】:

这绝对是我要找的。​​span> D:2900 美元除外!!! Dang... 可悲的是,我们公司的收入远远超过 10 万美元,但我知道他们不会以 2900 美元的价格出现,因为我想要它相对简单。 看起来如果我想走便宜的路线,我将不得不坚持 Google+ 的方式并使用 HTML 5 中的canvas 标记来绘制屏幕截图。然后只限制 HTML 4 浏览器中的功能。【参考方案2】:

如果您想使用 Gecko,可以考虑使用 LLMozLib。 查看更多详情here

编辑

有一个 ActiveX 控件可以在 Windows 上嵌入 Gecko。Sample here

编辑

我让它在 Windows 窗体应用程序上运行。 使用these resources. 它是 Gecko 的 csharp 包装器......

这是我的示例代码...

public partial class Form1 : Form

    public Form1()
    
        Xpcom.Initialize(@"C:\Users\esouza\Downloads\xulrunner"); //Tell where are XUL bin
        InitializeComponent();
        //geckoWebBrowser1 is an instance of GeckoWebBrowser control that I've dragged on the Form1
        geckoWebBrowser1.DocumentCompleted += new EventHandler(geckoWebBrowser1_DocumentCompleted);
    

    private void button1_Click(object sender, EventArgs e)
    
        geckoWebBrowser1.Navigate("http://www.google.com");
    

    void geckoWebBrowser1_DocumentCompleted(object sender, EventArgs e)
    
        Bitmap b = new Bitmap(geckoWebBrowser1.Width, geckoWebBrowser1.Height);
        geckoWebBrowser1.DrawToBitmap(b, new Rectangle  X = 0, Y = 0, Width = 800, Height = 600 );
        b.Save("file.bmp");
    

【讨论】:

【参考方案3】:

非常有趣的问题,我没有灵丹妙药。

您肯定需要一个具有某种描述的浏览器引擎,然后将渲染的输出捕获为位图。

我从this question 看到有一个为 WebKit 开发的 COM 包装器。也许这是一个很好的起点。

【讨论】:

以上是关于如何将包含 HTML 的字符串渲染到 C# 中的图像中?的主要内容,如果未能解决你的问题,请参考以下文章

渲染JSON而不替换Jinja中的字符[重复]

如何将用户输入的值传递到 c# 中的请求参数正文中?

如何在 UWP C# 中使用 BezierSegment 在 Canvas 上渲染 InkStroke

C# Winforms 中的 UI 渲染缓慢

检查 HtmlString 是不是是 C# 中的空格

带有检查元素功能的 HTML 渲染?如何使用 C#