三大主流方案對比
| 方案 | 核心元件 | 優點 | 缺點 | 適用場景 |
| WebKit.NET | WebKit.NET / CefSharp | 原生渲染、支援完整 PDF 功能、效能好 | 部署體積大 (~100MB)、需分發非託管 DLL | 功能豐富、離線環境 |
| WebBrowser + PDF.js | System.Windows.Forms.WebBrowser (IE內核) + Mozilla PDF.js | 無額外依賴、純 .NET、體積小 | IE 內核渲染差、PDF.js 載入慢、功能受限 | 簡單預覽、不想部署大型庫 |
| WebView2 (推薦) | Microsoft.Web.WebView2 (Edge Chromium) | 現代引擎、體積小 (Evergreen 自動更新)、效能佳、支援所有 Web 標準 | 需 Win10+ / 安裝 WebView2 Runtime、.NET Core 3.1+/Framework 4.6.2+ | **新專案首選**、長期維護 |
方案一:WebView2 實作 (現代、推薦)
1. NuGet 安裝
Install-Package Microsoft.Web.WebView2
2. 表單設計
// Form1.cs
using Microsoft.Web.WebView2.WinForms;
public partial class PdfViewerForm : Form {
private WebView2 webView;
public PdfViewerForm() {
InitializeComponent();
InitializeWebView();
}
private async void InitializeWebView() {
webView = new WebView2();
webView.Dock = DockStyle.Fill;
this.Controls.Add(webView);
// 確保 WebView2 環境就緒
await webView.EnsureCoreWebView2Async(null);
// 設定 PDF 檔案
string pdfPath = @"C:\path\to\document.pdf";
webView.CoreWebView2.Navigate(new Uri(pdfPath).AbsoluteUri);
}
}
3. 本地 PDF 檔案載入 (file:// 協定)
string pdfPath = Path.GetFullPath("document.pdf");
string fileUrl = new Uri(pdfPath).AbsoluteUri; // file:///C:/path/document.pdf
webView.CoreWebView2.Navigate(fileUrl);
4. 串流/Byte[] 載入 (無臨時檔案)
byte[] pdfBytes = File.ReadAllBytes("document.pdf");
string base64 = Convert.ToBase64String(pdfBytes);
string html = $@"
";
webView.NavigateToString(html);
方案二:CefSharp (Chromium 嵌入)
// NuGet: CefSharp.WinForms
using CefSharp.WinForms;
ChromiumWebBrowser browser = new ChromiumWebBrowser("file:///C:/path/document.pdf");
browser.Dock = DockStyle.Fill;
this.Controls.Add(browser);
方案三:WebBrowser + PDF.js (輕量、相容舊專案)
// 1. 專案加入 PDF.js (wwwroot/pdfjs/)
// 2. 產生 HTML 頁面載入 PDF.js
string html = $@"
";
webBrowser.DocumentText = html;
// 或 webBrowser.Navigate("file:///C:/path/pdfjs/viewer.html?file=...");
部署注意事項
| 方案 | 部署需求 |
| WebView2 | 安裝 WebView2 Evergreen Runtime (或打包 Fixed Version ~150MB) |
| CefSharp | 複製 `CefSharp.BrowserSubprocess.exe`、`locales/`、`swiftshader/` 等至輸出目錄 |
| PDF.js | 隨專案部署 `pdfjs/` 資料夾,設定 Copy to Output Directory |
選型建議
- 新專案、.NET Core/5+/6+、Win10+ 環境:優先 **WebView2**
- 需離線、無網路、XP/Win7 相容:考慮 **CefSharp** (固定版本)
- 極簡預覽、不想引入大型依賴:WebBrowser + PDF.js (但 IE 內核已淘汰)