var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-20738293-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script')"/>
<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jutleo
    歡迎走進有風的地方~~
    posts - 63,  comments - 279,  trackbacks - 0
              jasperReport客戶端采用applet,applet和activeX插件的區別大家搜一下,有一堆東西可以借鑒,下載jasperreports-3.0.0,在相應的sample OR demo(記得不清了)中可以找到jasperReport 實現的客戶端打印demo,下來就來分析下具體實現。
      新建一print.js文件:
    function loadApplet(applet_URL) {
        
    var URL = applet_URL + "/applets/jre-1_5_0_18-windows-i586-p.exe";
        document.write('
    <OBJECT id="myApplet" name="myApplet"');
        document.write('classid
    ="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH="0" HEIGHT="0" MAYSCRIPT name="myApplet"');
        document.write('codebase
    ='+ URL +'>');
        document.write('
    <PARAM NAME="CODE" VALUE="org.bulktree.report.print.applet.PrinterApplet" />');
        document.write('
    <PARAM NAME="CODEBASE" VALUE="../applets" />');
        document.write('
    <PARAM NAME="ARCHIVE" VALUE="jasperreports-3.0.1-applet.jar" />');
        document.write('
    <PARAM NAME="type" VALUE="application/x-java-applet;version=1.5.0" />');
        document.write('
    <PARAM NAME="scriptable" VALUE="false" />');
        document.write('
    <PARAM NAME="REPORT_URL" VALUE="../report.view">');
        document.write('no support java');
        document.write('
    <comment>');
        document.write('
    <embed type="application/x-java-applet;version=1.5.0"');
        document.write('CODE
    ="org.bulktree.report.print.applet.PrinterApplet"');
        document.write('JAVA_CODEBASE
    ="applets" ARCHIVE="jasperreports-3.0.1-applet.jar"');
        document.write('scriptable
    =false');
        document.write('pluginspage
    ='+ URL +'>');
        document.write('
    <noembed></noembed>');
        document.write('
    </embed>');
        document.write('
    </comment>');
        document.write('
    </OBJECT>');
    }
         URL為一個固定的路徑,是為了下載/applets/jre-1_5_0_18-windows-i586-p.exe(JRE運行環境)而存在的,也可以使用外網從sun公司網站下載,
         REPORT_URL 為applet所要訪問的地址,在工程的web.xml配置/report.view如下servlet即可,此servet可接收applet參數,生成jasperPrint對象,并傳遞到客戶端applet中進行打印或者預覽。
      servlet配置如下:
    <servlet>
                    
    <servlet-name>ReportServlet</servlet-name>
            
    <servlet-class>org.bulktree.report.print.applet.ReportServlet</servlet-class>
        
    </servlet>
    <servlet-mapping>
            
    <servlet-name>ReportServlet</servlet-name>
            
    <url-pattern>/report.view</url-pattern>
        
    </servlet-mapping>

    ReportServlet核心代碼就是根據業務找到對應的模板文件填充數據生成jasperPrint對象,產生的jasperPrint對象以對象流的形式發送給客戶端,核心代碼如下:
    // 生成jasperPrint對象
                JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
                        mapParam, 
    new JREmptyDataSource());

    //組裝流
    response.setContentType("application/octet-stream");
                    response.setBufferSize(
    8986000);
                    ServletOutputStream outStream 
    = response.getOutputStream();
                    ObjectOutputStream oos 
    = new ObjectOutputStream(outStream);
                    oos.writeObject(jasperPrint);
    當然,客戶端的applet使用如下:
    /*
                         * applet與Servlet交互 URL傳遞頁面傳來的參數請求服務器Servlet
                         * 把applet傳遞的參數追加到servlet中 2008-10-14 laoshulin
                         
    */


                        url 
    = new URL(getCodeBase(), requestUrl + "?printView=true"
                                
    + paraStr);

                        
    if (url == null{
                            JOptionPane.showMessageDialog(
    this,
                                    
    "Source URL not specified");
                        }
     else {
                            InputStream in 
    = url.openStream();
                            ObjectInputStream objIn 
    = new ObjectInputStream(in);
                            Object obj 
    = objIn.readObject();
                            
    if (obj instanceof JasperPrint) {

                            }
     else {
                                JOptionPane.showMessageDialog(
    this, obj.toString());
                                
    return;
                            }


                            
    if (jasperPrint == null{
                                
    // 根據Servlet返回的URL(ObjectStream)產生JasperPrint對象
                                jasperPrint = (JasperPrint) obj;

                            }

                            
    // 攔截出現空報表問題
                            if (jasperPrint != null
                                    
    && jasperPrint.getPages().size() > 0{
                                
    /*
                                 * 調用JasperReport.jar中JasperViewer繪制報表Frame
                                 * JasperViewer繼承自JFrame,采用setDefaultCloseOperation響應關閉窗口事件
                                 
    */


                                ViewerFrame viewerFrame 
    = new ViewerFrame(this
                                        .getAppletContext(), jasperPrint,isShowPrintButton);
                                
                                viewerFrame.setVisible(
    true);
                                
    //viewerFrame.show();

                                
    // JasperViewer viewer = new
                                
    // JasperViewer(jasperPrint);
                                
    // viewer.setVisible(true);
                                
    // viewer.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
                                
    // 如果請求為空彈出對話框予以提示
                            }
     else {
                                JOptionPane
                                        .showMessageDialog(
    this,
                                                
    "Please check Your Report SQL! It resulted in empty Report! ");
                                
    return;
                            }

                        }

    其中requestUrl為applet配置中的REPORT_URL,現實中可以采用此種方式傳遞參數到applet中,下篇文章會介紹更合適的業務數據傳遞,?printView=true表示,傳遞printView參數對應的值為true,用來預覽使用。剩下的工作就是怎么按照自己的要求打印和預覽了。
     jasperReport為我們提供了打印和預覽現成的方法:
    // 打印報表
                                        JasperPrintManager
                                                .printReport(print, 
    false);

    /*  預覽報表
                                 * 調用JasperReport.jar中JasperViewer繪制報表Frame
                                 * JasperViewer繼承自JFrame,采用setDefaultCloseOperation響應關閉窗口事件
                                 
    */

                                ViewerFrame viewerFrame 
    = new ViewerFrame(this
                                        .getAppletContext(), jasperPrint);
                                viewerFrame.setVisible(
    true);

    最后記著釋放對象哦,瀏覽器會受不了得:
    url = null;
                jasperPrint 
    = null;
    OK,客戶端就出現了,參照demo沒有什么難度,下一篇我會介紹一下具體的細節,及套打的實現。
    posted on 2009-10-27 20:58 凌晨風 閱讀(7162) 評論(12)  編輯  收藏 所屬分類: iReport + JasperReport 系列

    FeedBack:
    # re: iReport+jasperReport之客戶端打印[未登錄]
    2009-10-29 08:58 | john
    applet打印,會要求客戶端安裝jvm的吧,帆軟報表是采用flash打印,客戶端瀏覽器上安裝flash插件就行了,這比安裝jvm要簡便的多。我不是跟帆軟做廣告,而是感覺他們采用這樣做比較值得借鑒。  回復  更多評論
      
    # re: iReport+jasperReport之客戶端打印[未登錄]
    2009-10-29 12:09 | no
    ls說的是FineReport吧
    flash也是要安裝插件的,有些服務器系統就沒有裝這個,比如Win2003。
    也就是說還是需要裝插件的....  回復  更多評論
      
    # re: iReport+jasperReport之客戶端打印
    2009-10-29 13:05 | 凌晨風
    只需要客戶端按照jre就可以了,jre文件很小,而且可以存放在服務器上  回復  更多評論
      
    # re: iReport+jasperReport之客戶端打印
    2009-11-02 14:29 | tt
    能把寫好的程序打包發上來不  回復  更多評論
      
    # re: iReport+jasperReport之客戶端打印
    2009-11-02 15:11 | 凌晨風
    工程是本來是一個打包給其它項目使用的jar包,不過還有套打等一些其它的東西,慢慢會貼上來的  回復  更多評論
      
    # re: iReport+jasperReport之客戶端打印
    2009-11-02 16:08 | tt
    可以寫一個簡單的例子, iReport+jasperReport,把打印功能用進去就可以了啊,只有工程部署起來,才好理解,不然會報很多錯的~~~還想問您一下,用 iReport+jasperReport execl導出時,如何合并列呢  回復  更多評論
      
    # re: iReport+jasperReport之客戶端打印
    2009-11-04 14:03 | tt
    請問能加你QQ,問你一些問題不  回復  更多評論
      
    # re: iReport+jasperReport之客戶端打印
    2009-11-04 14:31 | 凌晨風
    這篇是對jasperReport自帶例子的說明,可以看看源碼啊,MSN:laoshulin@gmail.com   回復  更多評論
      
    # re: iReport+jasperReport之客戶端打印
    2009-11-23 14:19 | 愛銀
    期待你的下一篇文章,jrxml背景怎么設置,打印的時候 怎么控制背景的顯示不顯示。。。。期待。。  回復  更多評論
      
    # re: iReport+jasperReport之客戶端打印
    2009-11-26 14:51 | as
    想問一下,用iReport工具制作模板來做套打,背景設置的圖片,想讓圖片在預覽時顯示,打印時背景不打印,怎么做?  回復  更多評論
      
    # re: iReport+jasperReport之客戶端打印
    2009-11-26 20:23 | 凌晨風
    不好意思,最近太忙了,馬上會抽時間寫出來  回復  更多評論
      
    # re: iReport+jasperReport之客戶端打印
    2013-03-22 09:47 | 小岳
    能不能發一下源碼,最好是能部署的可以運行的,代碼太多,想看的完整一些,謝謝!  回復  更多評論
      

    <2009年10月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(11)

    我參與的團隊

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    新聞分類

    新聞檔案

    收藏夾

    圍脖

    最新隨筆

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费乱码中文字幕网站| 亚洲爆乳无码一区二区三区| 成人a毛片视频免费看| 亚洲午夜久久久久妓女影院| 99视频在线精品免费| 日韩亚洲人成在线| 亚洲性日韩精品一区二区三区 | 免费夜色污私人影院在线观看| 免费无码又爽又刺激高潮软件| 亚洲一区二区久久| 久久精品国产精品亚洲| 青娱乐免费在线视频| 男女作爱免费网站| 精品亚洲国产成AV人片传媒| 免费v片在线观看| 天天影视色香欲综合免费| 伊人久久国产免费观看视频| 国产成人精品亚洲2020| 久久精品国产精品亚洲艾| 国产免费人人看大香伊| 18女人毛片水真多免费| aa级毛片毛片免费观看久| 亚洲爆乳AAA无码专区| 久久久久久亚洲AV无码专区| va亚洲va日韩不卡在线观看| 欧美好看的免费电影在线观看 | 国产成人无码a区在线观看视频免费| 暖暖免费在线中文日本| 免费激情网站国产高清第一页| 亚洲剧场午夜在线观看| 亚洲av无码乱码国产精品| 免费大黄网站在线观看| 成年女人免费视频播放体验区| 四虎国产精品永久免费网址| 亚洲精品黄色视频在线观看免费资源 | 国产一级一片免费播放i| 免费A级毛片无码A∨免费| 一级毛片在线免费视频| 亚洲国产综合AV在线观看| 91精品国产免费久久久久久青草| 亚洲美女自拍视频|