跨瀏覽器的打印程序的設(shè)計(jì)
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
我在多年之前設(shè)計(jì)過(guò)一個(gè)ActiveX的打印控件,當(dāng)時(shí)在市面上找不到符合自己要求的打印控件,所以就按照自己的思路設(shè)計(jì)開(kāi)發(fā)了一個(gè)打印控件,并共享出來(lái),沒(méi)想到得到許多同行朋友的認(rèn)可,大家用起來(lái)覺(jué)得還挺不錯(cuò)的。 已經(jīng)過(guò)了許多年,瀏覽器已經(jīng)由當(dāng)年的IE或以IE為內(nèi)核的國(guó)產(chǎn)瀏覽器為主流,轉(zhuǎn)為以Google的Chrome瀏覽器或以Chrome為內(nèi)核的國(guó)產(chǎn)瀏覽器為主流了,ActiveX已經(jīng)成為昨日黃花。我本想這么多年過(guò)去了,各種技術(shù)都是日新月異的,作為打印應(yīng)該早就不是什么問(wèn)題,可到了自己做項(xiàng)目開(kāi)發(fā)時(shí),需要用到比較復(fù)雜一點(diǎn)的打印時(shí),去網(wǎng)上找一找,才發(fā)現(xiàn)打印這一塊的技術(shù)還是沒(méi)有多大的發(fā)展,排在百度搜索前幾名的所謂輕打印控件,還是和許多年前一樣的有以下幾個(gè)毛?。阂皇菆?bào)表設(shè)計(jì)繁瑣,既當(dāng)?shù)之?dāng)媽的,既要用Javascript定義報(bào)表的格式,又要組織報(bào)表的數(shù)據(jù),一個(gè)操作窗口,需要自己先計(jì)算好各顯示的坐標(biāo),然后再一一的畫(huà)出來(lái),這樣的報(bào)表設(shè)計(jì)用起來(lái)使人發(fā)狂,一二個(gè)報(bào)表還可以勉強(qiáng)對(duì)應(yīng),要是多做幾個(gè)就累死人了,而且以后維護(hù)修改也很麻煩。二是打印的數(shù)據(jù)量稍大一點(diǎn),比如一次打印幾十頁(yè)數(shù)據(jù),瀏覽器就卡死在那里,半天都沒(méi)有反應(yīng),打印一個(gè)大一點(diǎn)的報(bào)表,把用戶和公司的技術(shù)服務(wù)都快逼瘋了。三是所謂的HTML打印,因?yàn)闉g覽器頁(yè)面和紙張,在版面和精度控制方面的差異,導(dǎo)致網(wǎng)頁(yè)顯示和實(shí)際打印的效果差很遠(yuǎn),而且因?yàn)轫?yè)面一般是前端程序員通過(guò)JS、CSS等技術(shù)設(shè)計(jì)出來(lái)的,而報(bào)表開(kāi)發(fā)這個(gè)一般是屬于后端程序員的工作,這樣硬是把后端開(kāi)發(fā)的工作推給前端,還很難把報(bào)表這一塊做好。 我想如其用著這些蹩腳的東西,還不如把自己多年前設(shè)計(jì)的打印控件進(jìn)行升級(jí),讓其支持所有的主流瀏覽器。Chrome注重安全性、健壯性和用戶體驗(yàn),而打印程序需要管理用戶本地的打印機(jī),作為瀏覽器中渲染執(zhí)行的網(wǎng)頁(yè)程序,是無(wú)法直接控制打印機(jī),所以這個(gè)必須通過(guò)應(yīng)用程序來(lái)進(jìn)行精準(zhǔn)打印。所有的瀏覽器都可以通過(guò)URL Protocol協(xié)議來(lái)調(diào)用本地程序。 這個(gè)跨瀏覽的打印控件的總體設(shè)計(jì)思路是:在服務(wù)端把打印模板設(shè)計(jì)好,把所需要打印的數(shù)據(jù)組織好,再生成一個(gè)臨時(shí)文件的URL,然后把此URL作為參數(shù)通過(guò)URL Protocol協(xié)議去調(diào)用本地的打印控件,打印控件下載此臨時(shí)文件,再解析出打印模板和打印數(shù)據(jù),最后進(jìn)行直接打印或打印預(yù)覽。 我按照此思路,編寫了服務(wù)端的類庫(kù)和打印控件,服務(wù)端的類庫(kù)是完全開(kāi)源的,提供所有的源代碼,目前的源代碼版本有Java、C#、PHP,對(duì)于其它語(yǔ)言,我暫時(shí)還沒(méi)有用過(guò),有需要的朋友可以自己完善一下。要集成到自己的項(xiàng)目中,也是比較簡(jiǎn)單的,我提供了詳細(xì)的說(shuō)明文檔,一般只需要引用2個(gè)源文件就可以直接調(diào)用其中的函數(shù)了。 對(duì)于打印控件,因?yàn)樯婕癏TTP、JSON等技術(shù),這個(gè)C#比C++更快開(kāi)發(fā),所以我采用.net framework 3.5進(jìn)行開(kāi)發(fā),這個(gè)框架是Win 7系統(tǒng)自帶,對(duì)于Win 7和Win 10 的電腦無(wú)需再次安裝,對(duì)于古老的XP則需要先安裝此框架。 開(kāi)發(fā)了此打印控件之后,除了自己的項(xiàng)目使用之后,我共享給同行朋友使用,他們一致反應(yīng),控件穩(wěn)定好用,兼容Windows系統(tǒng)下的所有瀏覽器;速度快,打印預(yù)覽100頁(yè),也只需要5秒鐘;設(shè)計(jì)效率高,通過(guò)簡(jiǎn)單的拖放就可以設(shè)計(jì)一份完美的中國(guó)式報(bào)表; 還支持用戶自主在線設(shè)計(jì)報(bào)表等。 有需要的朋友,請(qǐng)加入QQ群:218392762 或者請(qǐng)直接Q我:12988672 或者請(qǐng)加我的微信:dong0738
【轉(zhuǎn)】https://www.cnblogs.com/dong0738/p/10990842.html 該文章在 2023/8/11 18:39:07 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |