報表工具有哪些列印技術?
在 C/S 時代,報表是由應用程式顯示的,可以直接操控印表機來實現列印。進入到 B/S 時代後,報表呈現變成瀏覽器的事情了,而瀏覽器中的 JS 程式設計不能直接控制印表機,只能依靠瀏覽器本身的列印能力。這種方式下的問題很多,比如不能精確分頁,瀏覽器一般是根據使用者設定的頁面大小和 web 頁面的內容多少來自行決定分頁位置,程式設計師很難控制;再比如不能準確對齊邊邊距及列印文字,無法實現發票套打等功能。
瀏覽器為彌補這些能力,提供了 ActiveX 控制元件,這相當於把原來的 C/S 前端程式搬進了瀏覽器,這樣就可以解決列印精確度和分頁可控性等問題。但是 ActiveX 有很嚴重的安全問題:只要電腦的使用者可以完成的任務,它都可以完成,比如它可以存取登錄檔、可以隨意訪問本地檔案系統等。這一點嚴重違背了瀏覽器的原則,所以後來逐漸被禁用了。
很多報表工具是 Java 寫成的,而 ActiveX 技術常常和 Java 並不相容。為了更好的相容 Java,瀏覽器也提供了 Java Applet 來嵌入 Java 程式,可以把 Applet 理解為用 Java 編寫的 ActiveX。這樣也就可以在瀏覽器端利用 Java 的能力實現列印了,也就是 Applet 列印。Applet 列印對於精確度和分頁的處理幾乎做到了完美,而且列印速度也比較快:
但是,Applet 列印也有不足之處,主要體現在兩方面:一個是 Applet 方式本身的配置要求嚴格,一個是 Java 和瀏覽器的升級引起的一系列問題。Applet 要求客戶端至少安裝了 jre,這點操作對人員要求有點高了。雖然 Applet 比 ActiveX 的安全性要好一點,但仍有安全問題。近年來瀏覽器都強化了安全性,對 Java Applet 也進行了限制,要求進行數字簽名,所以 Java7 以上版本列印時容易彈出以下對話方塊,新增了使用者操作:
谷歌瀏覽器乾脆從 42 版本開始禁用了 Java 外掛,火狐瀏覽器也隨後禁用了 Java 外掛,目前就只有 IE 核心的瀏覽器支援,雖然現在適用面很窄了,但也有一些使用者仍然選擇使用該方式。
Flash 是瀏覽器中一直可以使用且安裝率很高的通用外掛,它有較強的圖形呈現等能力,而且可以程式設計,於是被想到用來實現列印。Flash 列印方式的出現解決了列印操作複雜度高、瀏覽器資源佔用多的問題。它的實現原理是:客戶端點選列印後會觸發 Flash Player 外掛(外掛幾乎瀏覽器都自帶,一般不會給終端帶來安裝的麻煩,而且瀏覽器資源佔用少),Flash 會按照傳遞過來的內容再畫到自己的皮膚中,然後傳到印表機列印,總體來看列印速度也挺快的。Flash 列印也屬於精確列印,向量列印模式下內容不失真。
現在雖然用 Flash 列印的比較多,但是 Flash 列印有個無法解決的弊端,就是它自身的安全沙箱機制,這個機制不允許傳遞紙張資訊,那麼就會造成一個問題:客戶在列印前需要手動調整紙張。
PDF 列印也是替代 applet 列印的一種常用列印方式,它的實現的原理是是從伺服器端下載一個 PDF 檔案流,然後呼叫 Adobe Reader,從而利用 Adobe 實現列印功能。也因此要給瀏覽器安裝對應外掛,不過一般情況下系統安裝 Adobe Reader 後會自動給 瀏覽器安裝對應外掛。
PDF 列印是 Adobe Reader 列印的,前端並沒有自編的程式碼了,好處是徹底沒有安全性問題了,不用擔心伺服器端的惡意程式碼攻擊本地電腦,但缺點是無法進行復雜的邏輯控制,比如無法在列印介面進行列印縮放、清除圖層、映象列印、分欄等設定。
小結 1
每種列印方式都有它各自的優勢和不足,一個好的報表工具,除了 ActiveX 外,應當同時支援其他幾種列印方式,以便於讓使用者在不同需求場景下自由選擇使用。
以上技術解決了精確列印的問題,而報表列印還有些其他常見的特殊需求:
靜默列印
靜默列印是指點選列印時不彈出選項視窗和印表機設定視窗,直接把報表結果輸出到印表機。報表工具應提供靜默列印前臺實現方式。
例如提供前臺 js 方法:
Applet 直接列印:directPrintReport(‘report1’)
Flash 直接列印:directFlashPrintReport(‘report1’)
Pdf 直接列印:directPdfPrintReport(‘report1’)
套打
套打是基於一個模板檔案,把資料列印到指定位置的一種列印方式,這種列印需求實現的難點在於如何對內容進行精準定位,以及多頁列印下的處理。類 excel 或者 excel 報表工具可以方便製作模板檔案:
分頁處理應該由報表工具自行處理,不需要使用者額外新增相關程式碼,強制分頁機制要健全且易操作:
批次列印
批次列印是指點選一次列印按鈕就可以實現多張報表的列印輸出。報表工具應該本身提供批次列印功能,且支援的列印方式越多越好。使用方式也要儘可能的簡單易用,例如透過 URL 直接拼不同報表引數實現 pdf 批次列印: 由 URL 可以看出可以支援拼接不同帶引數的報表檔案,這一點也是需要批次列印支援的,另外,報表工具提供的批次列印還需要支援縮放列印、橫縱向混合列印。
小結 2
靜默列印、套打、批次列印一般也是報表工具自有的功能,只是可能提供的實現方案不一樣。當然,報表工具提供的實現操作配置越簡單越好。
擴充套件閱讀:
更多報表與 BI 的知識,可參考乾學院課程:
對進一步報表和 BI 技術感興趣的同學還可以搜尋“乾學院”,上面有整套的免費“商業智慧”技術課程, 或者直接點下面的連結也可以:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957599/viewspace-2705606/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- WEB 版的報表工具有沒有意義?Web
- 淺談報表工具的列印方案
- Python技術發展如何?具有哪些優勢?Python
- 報表工具都有哪些應用部署方式?
- 報表工具對比選型系列——列印與匯出
- Docker是什麼技術?Docker容器具有哪些特點?Docker
- 火爆的低程式碼開發具有哪些技術特點?
- 哪些報表工具提供了移動端功能?
- Excel弊端“一網打盡”,這款報表工具有點東西!Excel
- 報表工具都支援哪些資料來源型別?型別
- 做單據類報表的精確列印有什麼好用的報表工具
- 哪些自助報表工具是開源並且能整合的?
- 新媒體運營常用工具有哪些?新媒體運營技術
- 報表工具之sqr
- BI分析工具有哪些
- 報表工具如何生成 word 報告?
- 報表工具能否代替 BI?
- grafana開源報表工具Grafana
- 報表工具的分類
- hadoop包含哪些技術?Hadoop
- 3D列印技術之切片引擎(3)3D
- 3D列印技術之切片引擎(2)3D
- 免費報表工具知多少?
- .Net Core專業報表工具
- 報表工具:開源 or 收費?
- 最好的開源報表工具
- 自助列印,創新技術,印萌構建校園列印市場新生態
- 大資料技術包括哪些大資料
- hadoop需要哪些技術支援Hadoop
- SDN有哪些技術特徵?-VeCloud特徵Cloud
- 物聯網技術有哪些
- 大資料技術有哪些大資料
- NFC技術與RFID技術有哪些異同點?
- 從兩家主流報表工具的報jia看行業水深 - 常用報表工具對比 - 主流報表對比行業
- 2017程式設計趨勢預測:哪些技術大熱?哪些技術遇冷?程式設計
- 視覺化bi工具有哪些視覺化
- SSH工具有哪些?哪款好用?
- web前端開發工具有哪些Web前端