Рендеринг ASP.NET MVC ViewResult HTML в виде изображения без сторонних компонентов - PullRequest
3 голосов
/ 21 декабря 2011

есть ли способ визуализировать ViewResult или PartialViewResult как изображение?

Я попытался получить ViewResult в виде строки, и я получил строку, содержащую html, как и должно быть, но мне нужно, чтобы отобразить этот html вобраз.Если это возможно - со стилями и изображениями.

У меня есть идея получить браузер для этого HTML-кода на сервере и записать результат в изображение, но как это можно сделать на практике, я не знаюв это время.Если у вас есть идеи, пожалуйста, помогите.

Пожалуйста, не предлагайте никаких сторонних компонентов.Просто скажите, если это невозможно сделать с помощью стандартных классов .NET.

Спасибо

Ответы [ 2 ]

8 голосов
/ 22 декабря 2011

См. Как отобразить изображение с помощью элемента управления 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 голосов
/ 21 декабря 2011

Извините за мое предыдущее предложение. Это было не правильно, правда. Теперь я понимаю, что вы хотите. Но если вам не нравится идея использовать сторонние решения, единственный способ - написать собственный парсер, и это непростая задача. Или вы можете попробовать использовать класс WebBrowser и его метод DrawToBitmap, как описано здесь http://englestone.blogspot.com/2009/06/generate-screenshot-previews-with-c.html

...