3

ViewResult または PartialViewResult を画像としてレンダリングする方法はありますか?

ViewResult を文字列として取得しようとしましたが、本来あるべき html を含む文字列を取得しましたが、その html を画像にレンダリングする必要があります。可能であれば、スタイルと画像を使用して。

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

サードパーティのコンポーネントを提案しないでください。標準の .NET クラスでは不可能かどうかだけ教えてください。

ありがとうございました

4

2 に答える 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);
于 2011-12-21T21:51:54.013 に答える
0

前回の提案で申し訳ありません。それは正しくありませんでした。今、私はあなたが何を望んでいるのか理解しています。しかし、サードパーティのソリューションを使用するという考えが気に入らない場合、唯一の方法は独自のパーサーを作成することであり、それは簡単な作業ではありません。または、ここで説明されているように、WebBrowser クラスとそのメソッド DrawToBitmap を使用してみてくださいhttp://englestone.blogspot.com/2009/06/generate-screenshot-previews-with-c.html

于 2011-12-21T19:12:43.103 に答える