在 Web 應用日益普及的今天,如何將功能強大的 Windows 桌面控件直接嵌入網頁,一直是開發者關注的焦點。本文將詳細介紹如何使用 C# 開發 Windows 控件庫,並透過 ActiveX 技術將其內嵌於網頁中,實現一個簡易的 PDF 文件瀏覽功能。這不僅展示了 .NET 框架的強大互操作能力,也為需要在瀏覽器中呈現複雜文件格式的專案提供了可行方案。
整個解決方案採用分層封裝設計:
<object> 標籤載入 PdfControl這種設計將 COM 互操作的複雜性封裝在中間層,網頁端僅需引用生成的 .dll 檔案,大幅降低前端開發難度。
在 Visual Studio .NET 2003 中建立「Windows 控件庫」專案,命名為 PdfControl。專案預設類別重命名為 pdfctl,此名稱將直接對應網頁端 classid 參數,務必與 HTML 程式碼保持一致。
在工具箱右鍵選擇「加入/移除項目」→「COM 元件」→ 勾選「Acrobat Control for ActiveX 4.0」。將控件拖曳至設計介面,命名為 axAcroPDF。此控件提供 LoadFile()、setZoom() 等核心方法,支援 PDF 載入、縮放、列印等操作。
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# 介面供網頁呼叫。
強式名稱簽名:專案屬性 → 簽署 → 勾選「為組件簽署」,建立 .snk 金鑰檔。
CAS 原則調整:執行 caspol -s off 關閉程式碼存取安全檢查(僅限開發/受信任內網環境)。
IIS 虛擬目錄:建立虛擬目錄指向專案輸出資料夾,執行權限設為「純指令碼」。
<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 文件
圖二:動態調整縮放比例
caspol -s off 降低系統防護,生產環境建議改用 ClickOnce 部署或簽署受信任憑證。考慮到 ActiveX 技術已走向淘汰,新專案建議採用以下方案:
本文示範的 C# 控件嵌入網頁技術,雖然受限於時代背景(ActiveX/.NET Framework 1.1/IE 專屬),但其核心思想——「將複雜邏輯封裝於中間層,前端僅負責呈現」——在現代架構中依然普遍適用。理解這段歷史技術,有助於我們在遷移舊系統或設計混合式應用時做出更明智的技術選型。