不使用第三方组件将ASP.NET MVC ViewResult HTML呈现为图像

3
有没有一种方法可以将ViewResult或PartialViewResult渲染为图像?
我尝试将ViewResult转换为字符串,结果得到了一个包含HTML的字符串,但我需要将该HTML渲染为图像。如果可能的话,还需要包含样式和图片。
我有一个想法,即在服务器上获取此HTML的某些浏览器输出,并将结果捕获为图像,但我不知道如何实现。
请不要建议任何第三方组件。只需告诉我是否不可能使用标准.NET类来完成。
谢谢
2个回答

8
请查看如何使用WebBrowser控件渲染图像
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);

0

那不正确,他并不是要求下载一张图片。他想将网页呈现为图像,然后再下载它。下载很容易,但呈现则较为困难。 - Erik Funkenbusch
哦,真的吗?我还是不明白。你的意思是任务是返回图像,例如如果视图有表格,那么图像应该包括表格? - Kath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接