1. 程式人生 > 程式設計 >C# 使用 WebBrowser 實現 HTML 轉圖片功能的示例程式碼

C# 使用 WebBrowser 實現 HTML 轉圖片功能的示例程式碼

在 .NET 平臺上,我們有多種方式可以將一段 HTML 文字轉換為一張圖片: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,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 實現 HTML 轉圖片功能的示例程式碼

該方式的優點:

  1. 簡單易用。
  2. 支援最新的 .NET Core 環境。
  3. 無需引用第三方類庫,沒有版權和安全性風險,安全且免費。
  4. 支援從網際網路上載入內容。

該方式的缺點:

  1. 雖然支援 .NET Core ,但以上程式碼不能跨平臺使用。
  2. WebBrowser 控制元件基於 IE 瀏覽器並受宿主作業系統影響,要求被呈現的網頁具備較高的相容性。

使用 IE8+ 版本進行渲染

筆者在實際工作中使用到了部分 CSS3 屬性,預設情況下 WebBrowser 使用低版本的 IE 瀏覽器渲染網頁,這會導致部分網頁效果不生效,比如隔行變色效果。除了修改登錄檔,我們仍可以通過在網頁中加入 meta 標籤的方式告知 WebBrowser 使用高版本的 IE 瀏覽器進行渲染,僅需將以下程式碼複製至 HTML 的 head 標籤內即可:

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

以上就是C# 使用 WebBrowser 實現 HTML 轉圖片功能的例項程式碼的詳細內容,更多關於C# WebBrowser 實現 HTML 轉圖片的資料請關注我們其它相關文章!