2011-12-21 11 views
3

ViewResultまたはPartialViewResultをイメージとしてレンダリングする方法はありますか?ASP.NET MVC ViewResult HTMLをサードパーティコンポーネントのないイメージとしてレンダリングする

ViewResultを文字列として取得しようとしましたが、HTMLを含む文字列を取得する必要がありましたが、そのhtmlをイメージにレンダリングする必要があります。それが可能な場合 - スタイルと画像で。

私はサーバー上でこのhtmlのブラウザ出力を取得し、画像に結果をキャプチャするアイディアを持っていますが、現時点でどのように実行できるかはわかりません。 アイディアがあれば、お手伝いください。

第三者のコンポーネントを示唆しないでください。 standart .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

私の以前の提案に申し訳ありません。本当に正しいわけではありません。今私はあなたが望むものを理解しています。しかし、サードパーティ製のソリューションを使用する考えが嫌いなら、唯一の方法は独自のパーサーを作成することです。簡単な作業ではありません。それとも、それはここでhttp://englestone.blogspot.com/2009/06/generate-screenshot-previews-with-c.html

+0

と同じくらい簡単です、彼はダウンロードして求めていない参照を説明していますどのようにWebブラウザークラスとそのメソッドDrawToBitmapを使用することを試みることができます画像。彼は、Webページを画像としてレンダリングし、それをダウンロードしたいと考えています。ダウンロードは簡単で、レンダリングはそれほど簡単ではありません。 –

+0

ああ、本当ですか?私はまだ理解していない。つまり、画像にテーブルが含まれている必要があります。 – Kath

関連する問題