溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C#使用WebBrowser實現(xiàn)HTML轉(zhuǎn)圖片功能的方法

發(fā)布時間:2020-07-06 13:46:02 來源:億速云 閱讀:912 作者:清晨 欄目:開發(fā)技術(shù)

小編給大家分享一下C#使用WebBrowser實現(xiàn)HTML轉(zhuǎn)圖片功能的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

在 .NET 平臺上,我們有多種方式可以將一段 HTML 文本轉(zhuǎn)換為一張圖片:HTML Renderer、SelectPdf 、Aspose.Html 等。

在 WinForm 程序中,每一個 System.Windows.Forms.Control 的派生類型均包含一個名為 DrawToBitmap 的方法,該方法可以將控件繪制到一張圖片上。WebBrowser 具備顯示 HTML 的功能,又因為其從 Control 類型派生,所以包含 DrawToBitmap 方法。我們只需將要在 WebBrowser 上加載要展示的 HTML 并在其 DocumentCompleted 事件中繪制圖片即可:

public static async Task<Image> HtmlToImage(String html, int width = 1024, int height = 768)
{
  var taskCompletionSource = new TaskCompletionSource<Image>();
  var thread = new Thread(() =>
  {
    using var browser = new WebBrowser
    {
      Width = width,
      Height = height,
      ScrollBarsEnabled = false
    };
    browser.DocumentCompleted += (s, e) =>
    {
      var b = s as WebBrowser;
      if (b == null)
      {
        return;
      }
      var bmp = new Bitmap(b.Width, b.Height);
      b.DrawToBitmap(bmp, new Rectangle(0, 0, b.Width, b.Height));
      taskCompletionSource.SetResult(bmp);
      Application.ExitThread();
    };
    browser.DocumentText = html;
    Application.Run();
  });
  thread.SetApartmentState(ApartmentState.STA);
  thread.Start();
  return await taskCompletionSource.Task;
}

以上代碼參考了:Stack Overflow ,筆者將其改造為異步方法并增加了必要的釋放功能。在 LINQPad 中測試效果如下:

C#使用WebBrowser實現(xiàn)HTML轉(zhuǎn)圖片功能的方法

該方式的優(yōu)點:

  1. 簡單易用。
  2. 支持最新的 .NET Core 環(huán)境。
  3. 無需引用第三方類庫,沒有版權(quán)和安全性風(fēng)險,安全且免費。
  4. 支持從互聯(lián)網(wǎng)上加載內(nèi)容。
     

該方式的缺點:

  1. 雖然支持 .NET Core ,但以上代碼不能跨平臺使用。
  2. WebBrowser 控件基于 IE 瀏覽器并受宿主操作系統(tǒng)影響,要求被呈現(xiàn)的網(wǎng)頁具備較高的兼容性。
     

使用 IE8+ 版本進行渲染

筆者在實際工作中使用到了部分 CSS3 屬性,默認情況下 WebBrowser 使用低版本的 IE 瀏覽器渲染網(wǎng)頁,這會導(dǎo)致部分網(wǎng)頁效果不生效,比如隔行變色效果。除了修改注冊表,我們?nèi)钥梢酝ㄟ^在網(wǎng)頁中加入 meta 標(biāo)簽的方式告知 WebBrowser 使用高版本的 IE 瀏覽器進行渲染,僅需將以下代碼復(fù)制至 HTML 的 head 標(biāo)簽內(nèi)即可:

<meta http-equiv="X-UA-Compatible" content="IE=edge"/>

看完了這篇文章,相信你對C#使用WebBrowser實現(xiàn)HTML轉(zhuǎn)圖片功能的方法有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI