2011-12-21 35 views
3

圖像是有辦法來渲染的ViewResult或PartialViewResult爲圖像?渲染ASP.NET MVC的ViewResult HTML因爲沒有第三方組件

我試圖讓的ViewResult爲字符串,我得到了包含HTML,因爲它應該是一個字符串,但我需要渲染HTML圖像。如果可能 - 包括樣式和圖像。

我有一個想法,得到了這個網站上的服務器和捕獲結果的圖像瀏覽器的一些輸出,但它是如何在實踐中完成的,我不知道在這個時候。 如果您有任何想法,請幫忙。

請不要提出任何第三方組件。只要告訴它是否不可能通過標準的.NET類來完成。

謝謝

回答

8

How to render an image using the WebBrowser control

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

對不起,我以前的建議。這是不正確的,真的。現在我明白你想要什麼了。但是如果你不喜歡使用第三方解決方案的想法,唯一的方法就是編寫你自己的解析器,這不是一件容易的事情。或者你可以嘗試使用web瀏覽器類,以及它如何在這裏描述的方法DrawToBitmap http://englestone.blogspot.com/2009/06/generate-screenshot-previews-with-c.html

+0

這是不正確的,他不會要求下載一個圖像。他想要將網頁呈現爲圖像,然後下載它。下載很簡單,渲染不那麼簡單。 – 2011-12-21 20:29:28

+0

哦,真的嗎?我還是不明白。你的意思是任務是圖像的返回,例如,如果視圖有表格,圖像應該包含表格? – Kath 2011-12-21 21:08:15