JasperReport實現(xiàn)的打印中間件

前言

以前公司用Lodop打印控件,安裝在Chrome瀏覽器。新版的谷歌瀏覽器已經(jīng)不再支持安裝本地插件了?;旧纤蠰odop以及其他類似打印控件的使用者無不詬病其使用變態(tài)。后來使用JasperReport做報表,WEB應(yīng)用可以直接生成HTML,PDF等。本地打印還可以指定打印機。JasperReport支持分組,子報表等;可以設(shè)計出很多復(fù)雜的報表。簡直是一個良心大作。

但是有時候我們打印需要指定打印機,在網(wǎng)頁端不好實現(xiàn)了。需要在客戶機安裝一個打印中間件,提供打印數(shù)據(jù),并讓它實現(xiàn)個性化打印。接下來我們實現(xiàn)這個中間件:

演示

訪問服務(wù)端,點擊打印按鈕
點擊打印按鈕打印

流程圖

流程圖

系統(tǒng)的復(fù)雜點在于** 網(wǎng)頁 發(fā)送打印數(shù)據(jù)給 本地打印程序 **。思路如下:

本地打印程序(以下稱ClientPrinter),java實現(xiàn)的c/s程序。負責(zé)接收服務(wù)端的打印數(shù)據(jù),并且實現(xiàn)打印。

用戶在網(wǎng)頁點擊打印時,服務(wù)器返回jasper的模板文件和打印數(shù)據(jù),然后JS跨域發(fā)送模板文件和打印數(shù)據(jù)到ClientPrinter,ClientPrinter將模板文件和打印數(shù)據(jù)處理生成報表,最后返回結(jié)果給** 網(wǎng)頁 **。

用戶在網(wǎng)頁點擊打印時,服務(wù)器生成JasperPrint對象流數(shù)據(jù)data,并且將data存入緩存;然后把對應(yīng)的key返回到網(wǎng)頁端(更好的辦法是生成唯一url返回到網(wǎng)頁);接著網(wǎng)頁端通過自定義協(xié)議Url Protocol 調(diào)用本地的打印程序,本地程序通過url從服務(wù)端獲取打印數(shù)據(jù),最終完成打印。
*自定義協(xié)議Url Protocol請查看我另一篇博客 自定義Protocol URL從瀏覽器運行本地應(yīng)用


服務(wù)端系統(tǒng)

服務(wù)端需要提供JasperPrint打印數(shù)據(jù)。這里服務(wù)端直接提供JasperReport Studio 報表設(shè)計工具可以點擊這里下載。

        //服務(wù)端網(wǎng)頁js

        function print(url){
            location.href='albertprint://'+url;
        }

上面js中的url表示唯一的一個鏈接,這個鏈接返回JasperPrint對象流數(shù)據(jù)。

客戶端打印

public void print(String httpUrl) throws Exception{

        Object en = HttpRequestUtil.request(httpUrl);//用上文提供的url從服務(wù)端獲取打印對象流

        ResponseEntity re = (ResponseEntity) en;

        if(re.getStatus()==-1)throw new Exception(re.getMsg());

        printService.print((JasperPrint)re.getObj());//打印
    }

最近有點忙,過幾天把PrintClient加入jre打包成exe安裝包,客戶機可以設(shè)置開機啟動或者加入到服務(wù)
用戶端DEMO: PrintClient https://github.com/zyqwst/PrintClient

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 14,299評論 0 15
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評論 25 709
  • http://www.themelock.com/othertemplates/687000903-ample-a...
    寺院的研究僧閱讀 1,111評論 0 1
  • 企鵝讀了今天的晨讀感悟,想想從小到現(xiàn)在學(xué)的都是啞巴英語,前半年還專門辦了一個發(fā)音班,學(xué)習(xí),收效也甚微,到現(xiàn)在也不能...
    梅韻Eva閱讀 185評論 1 3

友情鏈接更多精彩內(nèi)容