跳過到頁腳內容
.NET幫助

Cefsharp.WPF.NET Core(開發者的工作原理)

開發人員現在可以輕鬆地將 Chromium 功能強大的 Web 瀏覽器引擎集成到他們的 .NET 桌面應用程序和 WPF 應用程序中,這要歸功於 CefSharp,這是一個創新的 .NET 包裝器,圍繞 Chromium 嵌入式框架構建。 CefSharp 為 .NET 應用程序開發人員實現了在自定義桌面界面中提供豐富的 Web 體驗,讓他們能夠利用 Chromium 的 Web 功能和開發人員工具,而無需任何外部依賴。 透過提供一系列新功能,例如自定義選項和對瀏覽器行為的控制,這個框架使得更容易地集成現代 Web 技術,如 HTML5、CSS3 和 JavaScript。

CefSharp 的跨平台互操作性和 Web 內容交互功能轉變了用戶與桌面解決方案中的基於 Web 的內容的互動和體驗,提升了桌面程序並在應用環境中實現了動態 Web 瀏覽體驗。 在本文中,我們將通過代碼片段看到更多關於 CefSharp 開源版本的內容。

如何使用 CefSharp

  1. 從 Visual Studio 專案中創建一個新的 Windows 表單。
  2. 安裝CefSharp庫。
  3. 聲明一個準備好最低限度编译的 CefSharp 所需對象。
  4. 輸入需要加載的 URL。
  5. 運行代碼。

安裝 CefSharp.WinForms

  • 使用 Visual Studio 的 NuGet 套件管理器是安裝 CefSharp 的最簡單方法。
  • 在 Visual Studio 中啟動項目。
  • 在解決方案資源管理器中,右鍵單擊項目。
  • 選擇“管理 NuGet 包”。
  • 轉到“瀏覽”選項卡並搜索“CefSharp”。
  • 選擇適合您項目的 CefSharp 包(CefSharp.Wpf,CefSharp.WinForms等)。
  • 要將包包含到項目中,請點擊“安裝”。

CefSharp 的重要性

CefSharp 是一個框架,通過輕鬆地將 Chromium Web 瀏覽器引擎的強大功能集成到 .NET 應用程序中,改變了開發人員構建桌面應用程序和自動化項目的方式。 借助 CefSharp 我們可以顯示遠端 Web 內容,包括具有 HTML5 支持的嵌入式 UI。

在 CefSharp 介紹中需要強調的重要事項包括:

  • Chromium 嵌入式框架(CEF)作為 CefSharp 的框架,允許將 Chromium 瀏覽器的功能集成到其他程序中。 使用 Google 的 Chromium 項目,CefSharp 提升了桌面程序的複雜 Web 功能。
  • .NET 集成:CefSharp 是一個功能強大的 Cef .NET 包裝器。 它使程序員能夠輕鬆地使用 C# 或其他 .NET 語言將快速的 Web 瀏覽器集成到其桌面 .NET 應用程序中。
  • 桌面應用中的 Web 瀏覽:使用 CefSharp 開發人員可以輕鬆地在其桌面程序中集成 Web 瀏覽功能。 這一功能為開發者開啟了無數可能性,使他們能夠將網上內容集成到其用戶界面中或者創建獨特的網絡啟動桌面應用。 它能在 JavaScript 事件觸發時接收回調。
  • 支持豐富的 Web 技術:通過使用 CefSharp,開發人員可以利用 Chromium 提供的所有功能,包括支持最新的 Web 標準如 HTML5、CSS3、JavaScript、WebGL 和其他現代 Web 標準。 這使得在桌面程序中包含前沿的 Web 技術成為可能。
  • 靈活性和自定義:CefSharp 讓開發人員在處理事件、執行 JavaScript、與在線內容互動、並調整瀏覽器行為以滿足特定應用需求方面擁有大量的靈活性和自定制選項。 CefSharp 支持使用 WebGL,利用 OpenGL/DirectX 進行硬件加速渲染的 3D 內容。

通過使用 CefSharp,開發人員可以改善桌面應用程序,促進 Web 瀏覽體驗,鼓勵用戶互動,並在應用環境中為用戶提供豐富的現代信息。

樣例代碼

using System;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;

namespace CefSharpExample
{
    public partial class MainForm : Form
    {
        private ChromiumWebBrowser chromeBrowser;

        public MainForm()
        {
            InitializeComponent();

            // Initialize CefSharp settings
            CefSettings settings = new CefSettings();
            Cef.Initialize(settings);

            // Create the ChromiumWebBrowser instance
            chromeBrowser = new ChromiumWebBrowser("https://ironpdf.com/"); // Load a URL

            // Add the ChromiumWebBrowser control to the form
            this.Controls.Add(chromeBrowser);
            chromeBrowser.Dock = DockStyle.Fill; // Fill the entire form

            // Handle when the browser component has finished loading
            chromeBrowser.LoadingStateChanged += ChromeBrowser_LoadingStateChanged;
        }

        private void ChromeBrowser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
        {
            if (!e.IsLoading)
            {
                // Page has finished loading
                // Perform actions after the page has loaded
                Console.WriteLine("Finished loading.");
            }
        }

        // Dispose of Cef resources when the form is closed
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            Cef.Shutdown();
        }
    }
}
using System;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;

namespace CefSharpExample
{
    public partial class MainForm : Form
    {
        private ChromiumWebBrowser chromeBrowser;

        public MainForm()
        {
            InitializeComponent();

            // Initialize CefSharp settings
            CefSettings settings = new CefSettings();
            Cef.Initialize(settings);

            // Create the ChromiumWebBrowser instance
            chromeBrowser = new ChromiumWebBrowser("https://ironpdf.com/"); // Load a URL

            // Add the ChromiumWebBrowser control to the form
            this.Controls.Add(chromeBrowser);
            chromeBrowser.Dock = DockStyle.Fill; // Fill the entire form

            // Handle when the browser component has finished loading
            chromeBrowser.LoadingStateChanged += ChromeBrowser_LoadingStateChanged;
        }

        private void ChromeBrowser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
        {
            if (!e.IsLoading)
            {
                // Page has finished loading
                // Perform actions after the page has loaded
                Console.WriteLine("Finished loading.");
            }
        }

        // Dispose of Cef resources when the form is closed
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            Cef.Shutdown();
        }
    }
}
Imports System
Imports System.Windows.Forms
Imports CefSharp
Imports CefSharp.WinForms

Namespace CefSharpExample
	Partial Public Class MainForm
		Inherits Form

		Private chromeBrowser As ChromiumWebBrowser

		Public Sub New()
			InitializeComponent()

			' Initialize CefSharp settings
			Dim settings As New CefSettings()
			Cef.Initialize(settings)

			' Create the ChromiumWebBrowser instance
			chromeBrowser = New ChromiumWebBrowser("https://ironpdf.com/") ' Load a URL

			' Add the ChromiumWebBrowser control to the form
			Me.Controls.Add(chromeBrowser)
			chromeBrowser.Dock = DockStyle.Fill ' Fill the entire form

			' Handle when the browser component has finished loading
			AddHandler chromeBrowser.LoadingStateChanged, AddressOf ChromeBrowser_LoadingStateChanged
		End Sub

		Private Sub ChromeBrowser_LoadingStateChanged(ByVal sender As Object, ByVal e As LoadingStateChangedEventArgs)
			If Not e.IsLoading Then
				' Page has finished loading
				' Perform actions after the page has loaded
				Console.WriteLine("Finished loading.")
			End If
		End Sub

		' Dispose of Cef resources when the form is closed
		Private Sub MainForm_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
			Cef.Shutdown()
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

此代碼使用 CefSharp 開發了一個基於 Chromium 的嵌入式 Web 瀏覽器的基本 WinForms 應用程序。 以下是一個説明:

  • 使用CefSettings初始化 CefSharp 設置。
  • ChromiumWebBrowser:此類表示由 CefSharp 提供的 Web 瀏覽器控件。
  • LoadingStateChanged事件處理瀏覽器的加載狀態變化,例如當頁面完成加載時。
  • MainForm_FormClosing事件確保在表單關閉時正確關閉 Cef 資源。

有關準備好編譯的使用 CefSharp 构建的基本示例應用程序,請參見GitHub 上的最小例项目。 更複雜的示例項目在項目的源代码中可用。

CefSharp 與 IronPDF 集成

IronPDF的 PDF 生成功能與 CefSharp 的 Chromium 嵌入式框架(CEF)瀏覽器集成需要在 .NET 應用程序中同時使用 CefSharp 和 IronPDF。 但是,截至 2022年1月的最新版本,CefSharp 和 IronPDF 之間沒有直接、開箱即用的接口。

CefSharp 的主要目標是將 Chromium 網頁瀏覽器引擎整合到 .NET 程序中,允許在應用程序的用戶界面中顯示和交互在線內容。 CefSharp 提供了用於 WPF 和 Windows Forms 應用程序的瀏覽器控件。

儘管 CefSharp 和 IronPDF 沒有直接集成,開發人員仍然可以在相同的應用程序上下文中使用這兩個庫。

IronPDF 在HTML 到 PDF轉換方麵表現出色,確保準確保持原始佈局和樣式。 它非常適合從網路內容生成 PDF,如報告、發票和文檔。 支持 HTML 文件、URL 和原始 HTML 字串的 IronPDF 可以輕鬆生成高質量的 PDF 文檔。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

首先,確保你的項目安裝了 IronPDF 庫。

要獲取 IronPDF 庫,您需要遵循即將到來的步驟。 在套件管理器中輸入以下代碼:

Install-Package IronPdf 
dotnet add package IronPdf
Install-Package IronPdf 
dotnet add package IronPdf
SHELL

CefSharp.Wpf.NetCore(開發人員工作原理):圖1 - 安裝 IronPDF

或者,您可以使用 NuGet 包管理器搜索 IronPDF 包。 在所有與 IronPDF 相關的 NuGet 包中,選擇並下載所需的包。

CefSharp.Wpf.NetCore(開發人員工作原理):圖2 - IronPDF

在 CefSharp C&中使用 IronPDF

要在 C# 應用程序中使用 CefSharp 將 IronPDF 集成,您需要執行兩步:利用 CefSharp 提供的基於 Chromium 的瀏覽器來渲染 HTML 內容,然後使用 IronPDF 將該 HTML 信息轉換為 PDF 文檔。 以下例子示範了如何完成這種集成:

using CefSharp;
using IronPdf;
using System;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CefSharpIronPdfIntegration
{
    public partial class MainForm : Form
    {
        private ChromiumWebBrowser chromeBrowser;

        public MainForm()
        {
            InitializeComponent();

            // Initialize CefSharp
            CefSettings settings = new CefSettings();
            Cef.Initialize(settings);

            // Create the ChromiumWebBrowser instance
            chromeBrowser = new ChromiumWebBrowser("https://ironpdf.com/"); // Load a URL

            // Add the ChromiumWebBrowser control to the form
            this.Controls.Add(chromeBrowser);
            chromeBrowser.Dock = DockStyle.Fill; // Fill the entire form

            // Handle when the browser component has finished loading
            chromeBrowser.LoadingStateChanged += ChromeBrowser_LoadingStateChanged;
        }

        private async void ChromeBrowser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
        {
            if (!e.IsLoading)
            {
                // Page has finished loading
                // Capture HTML content after page load completes
                string htmlContent = await chromeBrowser.GetSourceAsync();

                // Use IronPDF to generate a PDF from the captured HTML content
                var Renderer = new IronPdf.HtmlToPdf();
                var PDF = Renderer.RenderHtmlAsPdf(htmlContent);
                PDF.SaveAs("Output.pdf"); // Save the generated PDF

                Console.WriteLine("PDF generated successfully.");
            }
        }

        // Dispose of Cef resources when the form is closed to avoid unnecessary memory usage
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            Cef.Shutdown();
        }
    }
}
using CefSharp;
using IronPdf;
using System;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CefSharpIronPdfIntegration
{
    public partial class MainForm : Form
    {
        private ChromiumWebBrowser chromeBrowser;

        public MainForm()
        {
            InitializeComponent();

            // Initialize CefSharp
            CefSettings settings = new CefSettings();
            Cef.Initialize(settings);

            // Create the ChromiumWebBrowser instance
            chromeBrowser = new ChromiumWebBrowser("https://ironpdf.com/"); // Load a URL

            // Add the ChromiumWebBrowser control to the form
            this.Controls.Add(chromeBrowser);
            chromeBrowser.Dock = DockStyle.Fill; // Fill the entire form

            // Handle when the browser component has finished loading
            chromeBrowser.LoadingStateChanged += ChromeBrowser_LoadingStateChanged;
        }

        private async void ChromeBrowser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
        {
            if (!e.IsLoading)
            {
                // Page has finished loading
                // Capture HTML content after page load completes
                string htmlContent = await chromeBrowser.GetSourceAsync();

                // Use IronPDF to generate a PDF from the captured HTML content
                var Renderer = new IronPdf.HtmlToPdf();
                var PDF = Renderer.RenderHtmlAsPdf(htmlContent);
                PDF.SaveAs("Output.pdf"); // Save the generated PDF

                Console.WriteLine("PDF generated successfully.");
            }
        }

        // Dispose of Cef resources when the form is closed to avoid unnecessary memory usage
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            Cef.Shutdown();
        }
    }
}
Imports CefSharp
Imports IronPdf
Imports System
Imports System.Threading.Tasks
Imports System.Windows.Forms

Namespace CefSharpIronPdfIntegration
	Partial Public Class MainForm
		Inherits Form

		Private chromeBrowser As ChromiumWebBrowser

		Public Sub New()
			InitializeComponent()

			' Initialize CefSharp
			Dim settings As New CefSettings()
			Cef.Initialize(settings)

			' Create the ChromiumWebBrowser instance
			chromeBrowser = New ChromiumWebBrowser("https://ironpdf.com/") ' Load a URL

			' Add the ChromiumWebBrowser control to the form
			Me.Controls.Add(chromeBrowser)
			chromeBrowser.Dock = DockStyle.Fill ' Fill the entire form

			' Handle when the browser component has finished loading
			AddHandler chromeBrowser.LoadingStateChanged, AddressOf ChromeBrowser_LoadingStateChanged
		End Sub

		Private Async Sub ChromeBrowser_LoadingStateChanged(ByVal sender As Object, ByVal e As LoadingStateChangedEventArgs)
			If Not e.IsLoading Then
				' Page has finished loading
				' Capture HTML content after page load completes
				Dim htmlContent As String = Await chromeBrowser.GetSourceAsync()

				' Use IronPDF to generate a PDF from the captured HTML content
				Dim Renderer = New IronPdf.HtmlToPdf()
				Dim PDF = Renderer.RenderHtmlAsPdf(htmlContent)
				PDF.SaveAs("Output.pdf") ' Save the generated PDF

				Console.WriteLine("PDF generated successfully.")
			End If
		End Sub

		' Dispose of Cef resources when the form is closed to avoid unnecessary memory usage
		Private Sub MainForm_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
			Cef.Shutdown()
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

這段代碼展示了一個簡單的集成,其中加載在 Chromium 瀏覽器中的 HTML 內容被攔截,並使用 IronPDF 將其轉換為 PDF 文檔。 以下是說明:

  • 初始化 CefSharp 以便在 Windows 表單應用程序中集成 Chromium 瀏覽器。
  • ChromiumWebBrowser 控件:此控件在瀏覽器中加載指定的 URL(此示例中為"https://ironpdf.com/")並創建其實例。
  • LoadingStateChanged事件:跟蹤瀏覽器的加載進度。 當頁面加載完成時(e.IsLoading 為假),ChromeBrowser 使用 GetSourceAsync() 異步捕獲加載頁面的 HTML 內容。
  • IronPDF 集成:捕獲的 HTML 內容(htmlContent)將通過 IronPDF 的 HtmlToPdf 功能轉換為 PDF 文檔。 生成的 PDF 保存為“Output.pdf”。
  • 表單關閉:表單關閉後調用 Cef.Shutdown() 以確保正確關閉 Cef 資源。

CefSharp.Wpf.NetCore(開發人員工作原理):圖3 - 輸出

這段代碼展示了一個簡單的集成,其中加載在 Chromium 瀏覽器中的 HTML 內容被攔截,然後使用 IronPDF 轉換為 PDF 文檔。 根據應用程序的具體需求自定義 URL、錯誤處理和其他方面。 有關 IronPDF 文檔的更多信息,請參見IronPDF NuGet 包

結論

在 C# 應用程序中集成 IronPDF 與 CefSharp 為管理文檔和在線信息開啟了新的可能性。 通過結合 IronPDF 的 PDF 生成功能與 CefSharp 提供的基於 Chromium 的瀏覽器,開發人員可以創建靈活的應用程序,能夠在集成動態網絡內容的同時生成高質量的 PDF 文檔。

IronPDF 的 Lite 套裝包售價為$799,其中包含一年的軟件維護合同、升級選項、永久許可和三十天退款保證。 在三十天的試用期內,使用者可以使用帶水印的試用版本在真實場景中評價產品。 要了解更多關於 IronPDF 的費用、許可和免費版本的信息,請訪問IronPDF 許可信息。 有關 Iron Software 的更多信息,請訪問他們的Iron Software 網站

常見問題解答

如何將以 Chromium 為基礎的網頁瀏覽器整合到我的 .NET 桌面應用程式中?

您可以使用 CefSharp, 一個 Chromium 嵌入框架的 .NET 包裝器, 將以 Chromium 為基礎的網頁瀏覽器輕鬆整合到您的 .NET 桌面應用程式中。這使您能夠利用現代網頁技術,例如 HTML5、CSS3 和 JavaScript。

在 WPF 應用程式中設定 CefSharp 的步驟有哪些?

要在 WPF 應用程式中設定 CefSharp,首先在 Visual Studio 中建立一個新專案。使用 NuGet 套件管理員安裝 CefSharp.Wpf 套件,然後配置必要的設定以將 Chromium 瀏覽器嵌入到您的應用程式中。

如何將在 Chromium 瀏覽器中渲染的 HTML 內容轉換為 PDF 文件?

要將在 Chromium 瀏覽器中渲染的 HTML 內容轉換為 PDF,您可以先使用 CefSharp 渲染 HTML,然後使用 IronPDF 的 HtmlToPdf 函數生成 PDF 文件。

CefSharp 能否與 .NET 應用程式中的 PDF 生成工具一起使用?

是的,CefSharp 可以與像 IronPDF 這樣的 PDF 生成工具一起在 .NET 應用程式中使用。雖然沒有直接的整合,您可以利用兩者來渲染 HTML 內容並將其轉換為 PDF。

將 CefSharp 整合到 .NET 應用程式中的好處是什麼?

將 CefSharp 整合到 .NET 應用程式中提供的好處包括能夠在桌面應用程式中直接顯示和互動現代網頁內容。它還允許開發人員自訂瀏覽器行為並使用網頁技術如 HTML5、CSS3 和 JavaScript。

在將 CefSharp 與 .NET 應用程式整合時如何進行故障排除?

要進行 CefSharp 整合的故障排除,請確保所有 NuGet 包已正確安裝,檢查與您的 .NET 版本的相容性,並在 Visual Studio 專案中驗證配置設置。

在 .NET 應用程式中是否可以自訂 Chromium 瀏覽器的行為?

是的,CefSharp 允許開發人員自定義整合到 .NET 應用中的 Chromium 瀏覽器的行為,提供對瀏覽器設置的控制權,並能夠使用自定義代碼擴展功能。

使用 CefSharp 和 IronPDF 的专案有什么好处?

需要直接从动态网页内容生成 PDF 报告或文档的项目受益于同时使用 CefSharp 和 IronPDF。这种组合非常适合需要强大文档管理和网页内容渲染功能的应用程序。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。