首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

在網頁中嵌入 C# 開發的 ActiveX 控件:從零開始實作 PDF 瀏覽器

     編輯:關於C#

前言:跨越桌面與 Web 的界限

在 Web 應用日益普及的今天,如何將功能強大的 Windows 桌面控件直接嵌入網頁,一直是開發者關注的焦點。本文將詳細介紹如何使用 C# 開發 Windows 控件庫,並透過 ActiveX 技術將其內嵌於網頁中,實現一個簡易的 PDF 文件瀏覽功能。這不僅展示了 .NET 框架的強大互操作能力,也為需要在瀏覽器中呈現複雜文件格式的專案提供了可行方案。

核心架構:三層封裝策略

整個解決方案採用分層封裝設計:

  • 底層:Adobe Acrobat Control for ActiveX 4.0(COM 元件)
  • 中間層:C# 開發的 Windows 控件庫專案「PdfControl」,封裝 Acrobat 控件並暴露介面
  • 表現層:ASP.NET 網頁,透過 <object> 標籤載入 PdfControl

這種設計將 COM 互操作的複雜性封裝在中間層,網頁端僅需引用生成的 .dll 檔案,大幅降低前端開發難度。

關鍵實作步驟

1. 建立 Windows 控件庫專案

在 Visual Studio .NET 2003 中建立「Windows 控件庫」專案,命名為 PdfControl。專案預設類別重命名為 pdfctl,此名稱將直接對應網頁端 classid 參數,務必與 HTML 程式碼保持一致。

2. 引入 Acrobat ActiveX 控件

在工具箱右鍵選擇「加入/移除項目」→「COM 元件」→ 勾選「Acrobat Control for ActiveX 4.0」。將控件拖曳至設計介面,命名為 axAcroPDF。此控件提供 LoadFile()、setZoom() 等核心方法,支援 PDF 載入、縮放、列印等操作。

3. 封裝公開方法與屬性

public string FilePath {
    set { axAcroPDF.LoadFile(value); }
}

public void ZoomIn() { axAcroPDF.setZoom(axAcroPDF.GetZoom() + 10); }
public void ZoomOut() { axAcroPDF.setZoom(axAcroPDF.GetZoom() - 10); }

透過包裝方法,隱藏 COM 物件細節,提供乾淨的 C# 介面供網頁呼叫。

4. 簽名與安全性設定——關鍵門檻

強式名稱簽名:專案屬性 → 簽署 → 勾選「為組件簽署」,建立 .snk 金鑰檔。
CAS 原則調整:執行 caspol -s off 關閉程式碼存取安全檢查(僅限開發/受信任內網環境)。
IIS 虛擬目錄:建立虛擬目錄指向專案輸出資料夾,執行權限設為「純指令碼」。

5. 網頁端嵌入語法

<object id="pdfViewer" classid="https://localhost/PdfControl/pdfctl.dll#PdfControl.pdfctl"
        width="800" height="600" viasetype="yes">
</object>

classid 格式為 URL#Namespace.ClassName,viasetype="yes" 確保正確載入 .NET 組件。

實測效果與已知限制

PDF 控件初始載入畫面 圖一:控件成功載入 PDF 文件

點擊 Change Size 後的縮放效果 圖二:動態調整縮放比例

⚠️ 必須注意的限制條件

  1. 僅支援 Acrobat Reader 4.0 註冊的 ActiveX 控件,高版本(5.0+)介面不同,無法直接相容。
  2. 客戶端需安裝 .NET Framework 與 Acrobat Reader 4.0,部署門檻較高。
  3. 安全性風險:caspol -s off 降低系統防護,生產環境建議改用 ClickOnce 部署或簽署受信任憑證。
  4. 瀏覽器相容性:僅限 Internet Explorer 支援 ActiveX,現代瀏覽器(Edge/Chrome/Firefox)均已棄用。

現代替代方案建議

考慮到 ActiveX 技術已走向淘汰,新專案建議採用以下方案:

  • PDF.js:Mozilla 開源純 JavaScript PDF 渲染器,跨瀏覽器、無需外掛。
  • ASP.NET Core + Blazor WebAssembly:將 C# 邏輯編譯為 WASM,直接在瀏覽器執行。
  • 伺服器端轉檔:後端將 PDF 轉為圖片/HTML,前端純圖片輪播顯示。

總結

本文示範的 C# 控件嵌入網頁技術,雖然受限於時代背景(ActiveX/.NET Framework 1.1/IE 專屬),但其核心思想——「將複雜邏輯封裝於中間層,前端僅負責呈現」——在現代架構中依然普遍適用。理解這段歷史技術,有助於我們在遷移舊系統或設計混合式應用時做出更明智的技術選型。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved