列印外掛工作原理
背景
由於瀏覽器的安全沙箱機制,Web應用不能直接訪問印表機。而能直接控制印表機,實施精準列印,是很多SAAS軟體,B/S架構軟體,網站等應用的剛需。
我們調研了大量Web/網頁類應用,發現針對Web列印解決方案,主要有如下幾種技術實現方式:
1. 直接呼叫Javascript列印
通過呼叫瀏覽器window物件內建的print方法,彈出列印視窗,使用者點選確認列印。
這是實現網頁列印的最簡單方法,但它的問題是不夠靈活,不能精準控制要列印的頁面內容,無法方便地對印表機進行設定,無法適應一些有複雜列印要求的業務場景。
2. 瀏覽器控制元件列印
通過開發瀏覽器外掛的方式實現列印,例如IE瀏覽器的ActiveX控制元件。
由於此種方法通用性不強,不能適配市面上的主流瀏覽器,如chrome,edge等,已被淘汰。
3. 本地代理
還有一種方式是在本地安裝代理程式,代理程式會啟動一個服務(通常是http服務),來接受列印請求,實施列印。
網頁通過跨域技術,提交列印任務並接收反饋。此種方式是一種優秀的解決方案,廣泛應用於類似場景的Web應用中。
它的優勢是適配性強,理論上適用於所有瀏覽器。此種方式需要使用者下載安裝代理程式。
設計思路
能加加網頁列印外掛的核心理念,就是為開發人員提供簡單可靠的列印解決方案。
經過多方技術調研與分析,我們採用的是第三種方案:本地代理方式。
我們使用C++作為開發語言,軟體執行速度快,穩定性好,精心設計的軟體介面簡單易用。
執行場景
說明:
- 網頁頁面通過JS API檢測代理程式是否啟動,如沒有,提示使用者啟動;
- 如沒有安裝代理程式,使用者下載安裝代理程式;
- 安裝完成後,使用者啟動代理程式,網頁自動檢測到代理程式,隱藏提示並切換到正常內容;
- 網頁應用執行JS API傳送列印任務,並監聽列印完成事件;
- 代理程式進行列印,併發回列印完成事件;
- 網頁應用收到列印完成事件,列印完成。
相關文章
- 揭祕webpack外掛的工作原理Web
- cordova列印外掛備註
- Android外掛化原理(一)Activity外掛化Android
- MyBatis-07-外掛原理MyBatis
- Babel外掛原理與配置Babel
- Web列印外掛實現思路(C#/Winform)WebC#ORM
- [外掛擴充套件]工作時間軸(新外掛後臺)套件
- babel原理及外掛開發Babel
- 工作中常用的vscode外掛VSCode
- Babel 外掛原理的理解與深入Babel
- 深入淺出Service外掛化原理
- webpack4外掛及工作流程Web
- 7個深度工作的Visual Studio 外掛
- Android 外掛化原理入門筆記Android筆記
- 安卓外掛化框架Shadow原理分析安卓框架
- 前端網頁列印外掛print.js(可匯出pdf)前端網頁JS
- idea 使用外掛,提高工作效率Idea
- 貢獻給工作狂的chrome外掛Chrome
- 記錄一次mybatis log-plugin外掛不列印sqlMyBatisPluginSQL
- wordpress外掛開發01-原理講解
- Android外掛化原理分析(基於Neptune框架)Android框架
- k8s CSI 外掛註冊原理K8S
- 探索 babel 和 babel 外掛是怎麼工作的Babel
- 從ClassLoader到Android外掛化以及熱更新原理Android
- Mybatis外掛擴充套件以及與Spring整合原理MyBatis套件Spring
- Activity外掛化原理第二種方案:Hook IActivityManagerHook
- Activity外掛化原理第一種方案:Hook InstrumentationHook
- Flannel和Calico網路外掛工作流程對比
- [外掛擴充套件]書架外掛(新外掛後臺)套件
- SVN外掛和Tomcat外掛地址Tomcat
- [外掛擴充套件]Ping外掛套件
- 外掛化實現Android多主題功能原理剖析Android
- Mybatis第三方PageHelper分頁外掛原理MyBatis
- Taro cli流程和外掛化機制實現原理
- 外掛
- mybatis generator外掛系列--分頁外掛MyBatis
- [外掛擴充套件]更新IP外掛套件
- 外掛如何呼叫本外掛的View?View