首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

.NET WinForms 不安裝閱讀器顯示 PDF 方案:WebKit/PDF.js/WebView2

     編輯:程式設計疑難解答

三大主流方案對比

方案核心元件優點缺點適用場景
WebKit.NETWebKit.NET / CefSharp原生渲染、支援完整 PDF 功能、效能好部署體積大 (~100MB)、需分發非託管 DLL功能豐富、離線環境
WebBrowser + PDF.jsSystem.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 內核已淘汰)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved