傳統方案的困境
早期 Web 開發常用 Java Applet 或 ActiveX 控制項呼叫本機列印服務,但現代瀏覽器已全面停用 NPAPI 外掛與 ActiveX,這兩條路徑已不可行。
現代替代架構
- 瀏覽器原生列印 (CSS Print Media):
- 使用
@media print 樣式表控制列印版面。
- 呼叫
window.print() 觸發系統列印對話框。
- 優點:零安裝、跨平台;缺點:無法靜默列印、精細控制受限。
- 本地服務 + WebSocket/HTTP 長輪詢:
- 開發輕量級本地代理程式 (C#、Node.js、Go、Python 等) 監聽特定埠口。
- 網頁透過 WebSocket 或 AJAX 與本地服務通訊,傳送列印指令與資料 (PDF/圖片/原始指令)。
- 本地服務調用系統列印 API (
System.Drawing.Printing, lpr, lp 等) 實現靜默/精細列印。
- 典型應用:POS 系統、醫療資訊系統、倉儲標籤列印。
- 瀏覽器擴充套件 (Extension):
- 開發 Chrome Extension / Firefox Add-on,使用
nativeMessaging 與本地主機應用程式通訊。
- 權限較高,安裝門檻較高,適合企業內部管控環境。
- WebUSB / WebHID (實驗性):
- 直接從網頁存取 USB/HID 列印裝置,需裝置支援且用戶授權,目前普及度低。
推薦選型
- 一般報表、清單:CSS Print + window.print() 最省力。
- 需靜默列印、控制紙張/份數/標籤機:本地代理服務 + WebSocket 是業界標準做法。
- 嚴格管控環境:瀏覽器擴充套件 + Native Messaging。
不再糾結於已淘汰的 Applet/ActiveX,擁抱「本地服務 + Web 前端」的現代架構才是長久之計。