您好,登錄后才能下訂單哦!
這篇文章主要為大家分析了大數(shù)據(jù)報(bào)表工具的打印技術(shù)有哪些的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì)易懂,操作細(xì)節(jié)合理,具有一定參考價(jià)值。如果感興趣的話,不妨跟著跟隨小編一起來(lái)看看,下面跟著小編一起深入學(xué)習(xí)“大數(shù)據(jù)報(bào)表工具的打印技術(shù)有哪些”的知識(shí)吧。
在 C/S 時(shí)代,報(bào)表是由應(yīng)用程序顯示的,可以直接操控打印機(jī)來(lái)實(shí)現(xiàn)打印。進(jìn)入到 B/S 時(shí)代后,報(bào)表呈現(xiàn)變成瀏覽器的事情了,而瀏覽器中的 JS 編程不能直接控制打印機(jī),只能依靠瀏覽器本身的打印能力。這種方式下的問(wèn)題很多,比如不能精確分頁(yè),瀏覽器一般是根據(jù)用戶設(shè)置的頁(yè)面大小和 web 頁(yè)面的內(nèi)容多少來(lái)自行決定分頁(yè)位置,程序員很難控制;再比如不能準(zhǔn)確對(duì)齊邊邊距及打印文字,無(wú)法實(shí)現(xiàn)發(fā)票套打等功能。
瀏覽器為彌補(bǔ)這些能力,提供了 ActiveX 控件,這相當(dāng)于把原來(lái)的 C/S 前端程序搬進(jìn)了瀏覽器,這樣就可以解決打印精確度和分頁(yè)可控性等問(wèn)題。但是 ActiveX 有很?chē)?yán)重的安全問(wèn)題:只要電腦的用戶可以完成的任務(wù),它都可以完成,比如它可以存取注冊(cè)表、可以隨意訪問(wèn)本地文件系統(tǒng)等。這一點(diǎn)嚴(yán)重違背了瀏覽器的原則,所以后來(lái)逐漸被禁用了。
很多報(bào)表工具是 Java 寫(xiě)成的,而 ActiveX 技術(shù)常常和 Java 并不相容。為了更好的兼容 Java,瀏覽器也提供了 Java Applet 來(lái)嵌入 Java 程序,可以把 Applet 理解為用 Java 編寫(xiě)的 ActiveX。這樣也就可以在瀏覽器端利用 Java 的能力實(shí)現(xiàn)打印了,也就是 Applet 打印。Applet 打印對(duì)于精確度和分頁(yè)的處理幾乎做到了完美,而且打印速度也比較快:
但是,Applet 打印也有不足之處,主要體現(xiàn)在兩方面:一個(gè)是 Applet 方式本身的配置要求嚴(yán)格,一個(gè)是 Java 和瀏覽器的升級(jí)引起的一系列問(wèn)題。Applet 要求客戶端至少安裝了 jre,這點(diǎn)操作對(duì)人員要求有點(diǎn)高了。雖然 Applet 比 ActiveX 的安全性要好一點(diǎn),但仍有安全問(wèn)題。近年來(lái)瀏覽器都強(qiáng)化了安全性,對(duì) Java Applet 也進(jìn)行了限制,要求進(jìn)行數(shù)字簽名,所以 Java7 以上版本打印時(shí)容易彈出以下對(duì)話框,添加了用戶操作:
谷歌瀏覽器干脆從 42 版本開(kāi)始禁用了 Java 插件,火狐瀏覽器也隨后禁用了 Java 插件,目前就只有 IE 內(nèi)核的瀏覽器支持,雖然現(xiàn)在適用面很窄了,但也有一些用戶仍然選擇使用該方式。
Flash 是瀏覽器中一直可以使用且安裝率很高的通用插件,它有較強(qiáng)的圖形呈現(xiàn)等能力,而且可以編程,于是被想到用來(lái)實(shí)現(xiàn)打印。Flash 打印方式的出現(xiàn)解決了打印操作復(fù)雜度高、瀏覽器資源占用多的問(wèn)題。它的實(shí)現(xiàn)原理是:客戶端點(diǎn)擊打印后會(huì)觸發(fā) Flash Player 插件(插件幾乎瀏覽器都自帶,一般不會(huì)給終端帶來(lái)安裝的麻煩,而且瀏覽器資源占用少),F(xiàn)lash 會(huì)按照傳遞過(guò)來(lái)的內(nèi)容再畫(huà)到自己的面板中,然后傳到打印機(jī)打印,總體來(lái)看打印速度也挺快的。Flash 打印也屬于精確打印,矢量打印模式下內(nèi)容不失真。
現(xiàn)在雖然用 Flash 打印的比較多,但是 Flash 打印有個(gè)無(wú)法解決的弊端,就是它自身的安全沙箱機(jī)制,這個(gè)機(jī)制不允許傳遞紙張信息,那么就會(huì)造成一個(gè)問(wèn)題:客戶在打印前需要手動(dòng)調(diào)整紙張。
PDF 打印也是替代 applet 打印的一種常用打印方式,它的實(shí)現(xiàn)的原理是是從服務(wù)器端下載一個(gè) PDF 文件流,然后調(diào)用 Adobe Reader,從而利用 Adobe 實(shí)現(xiàn)打印功能。也因此要給瀏覽器安裝對(duì)應(yīng)插件,不過(guò)一般情況下系統(tǒng)安裝 Adobe Reader 后會(huì)自動(dòng)給 瀏覽器安裝對(duì)應(yīng)插件。
PDF 打印是 Adobe Reader 打印的,前端并沒(méi)有自編的代碼了,好處是徹底沒(méi)有安全性問(wèn)題了,不用擔(dān)心服務(wù)器端的惡意代碼攻擊本地電腦,但缺點(diǎn)是無(wú)法進(jìn)行復(fù)雜的邏輯控制,比如無(wú)法在打印界面進(jìn)行打印縮放、清除圖層、鏡像打印、分欄等設(shè)置。
小結(jié) 1
每種打印方式都有它各自的優(yōu)勢(shì)和不足,一個(gè)好的報(bào)表工具,除了 ActiveX 外,應(yīng)當(dāng)同時(shí)支持其他幾種打印方式,以便于讓用戶在不同需求場(chǎng)景下自由選擇使用。
以上技術(shù)解決了精確打印的問(wèn)題,而報(bào)表打印還有些其他常見(jiàn)的特殊需求:
靜默打印
靜默打印是指點(diǎn)擊打印時(shí)不彈出選項(xiàng)窗口和打印機(jī)設(shè)置窗口,直接把報(bào)表結(jié)果輸出到打印機(jī)。報(bào)表工具應(yīng)提供靜默打印前臺(tái)實(shí)現(xiàn)方式。
例如提供前臺(tái) js 方法:
Applet 直接打?。篸irectPrintReport(‘report1’)
Flash 直接打印:directFlashPrintReport(‘report1’)
Pdf 直接打印:directPdfPrintReport(‘report1’)
套打
套打是基于一個(gè)模板文件,把數(shù)據(jù)打印到指定位置的一種打印方式,這種打印需求實(shí)現(xiàn)的難點(diǎn)在于如何對(duì)內(nèi)容進(jìn)行精準(zhǔn)定位,以及多頁(yè)打印下的處理。類(lèi) excel 或者 excel 報(bào)表工具可以方便制作模板文件:
分頁(yè)處理應(yīng)該由報(bào)表工具自行處理,不需要用戶額外添加相關(guān)代碼,強(qiáng)制分頁(yè)機(jī)制要健全且易操作:
批量打印
批量打印是指點(diǎn)擊一次打印按鈕就可以實(shí)現(xiàn)多張報(bào)表的打印輸出。報(bào)表工具應(yīng)該本身提供批量打印功能,且支持的打印方式越多越好。使用方式也要盡可能的簡(jiǎn)單易用,例如通過(guò) URL 直接拼不同報(bào)表參數(shù)實(shí)現(xiàn) pdf 批量打印: http://localhost:6868/demo/reportJsp/pdfBatchPrint.jsp?report={t1.rpx}{t2.rpx(arg1=1;arg2=2)} 由 URL 可以看出可以支持拼接不同帶參數(shù)的報(bào)表文件,這一點(diǎn)也是需要批量打印支持的,另外,報(bào)表工具提供的批量打印還需要支持縮放打印、橫縱向混合打印。
小結(jié) 2
靜默打印、套打、批量打印一般也是報(bào)表工具自有的功能,只是可能提供的實(shí)現(xiàn)方案不一樣。當(dāng)然,報(bào)表工具提供的實(shí)現(xiàn)操作配置越簡(jiǎn)單越好。
關(guān)于“大數(shù)據(jù)報(bào)表工具的打印技術(shù)有哪些”就介紹到這了,更多相關(guān)內(nèi)容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請(qǐng)多多支持億速云網(wǎng)站!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。