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

          jutleo
          歡迎走進(jìn)有風(fēng)的地方~~
          posts - 63,  comments - 279,  trackbacks - 0
                    jasperReport客戶端采用applet,applet和activeX插件的區(qū)別大家搜一下,有一堆東西可以借鑒,下載jasperreports-3.0.0,在相應(yīng)的sample OR demo(記得不清了)中可以找到j(luò)asperReport 實(shí)現(xiàn)的客戶端打印demo,下來就來分析下具體實(shí)現(xiàn)。
            新建一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為一個(gè)固定的路徑,是為了下載/applets/jre-1_5_0_18-windows-i586-p.exe(JRE運(yùn)行環(huán)境)而存在的,也可以使用外網(wǎng)從sun公司網(wǎng)站下載,
               REPORT_URL 為applet所要訪問的地址,在工程的web.xml配置/report.view如下servlet即可,此servet可接收applet參數(shù),生成jasperPrint對象,并傳遞到客戶端applet中進(jìn)行打印或者預(yù)覽。
            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核心代碼就是根據(jù)業(yè)務(wù)找到對應(yīng)的模板文件填充數(shù)據(jù)生成jasperPrint對象,產(chǎn)生的jasperPrint對象以對象流的形式發(fā)送給客戶端,核心代碼如下:
          // 生成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);
          當(dāng)然,客戶端的applet使用如下:
          /*
                               * applet與Servlet交互 URL傳遞頁面?zhèn)鱽淼膮?shù)請求服務(wù)器Servlet
                               * 把a(bǔ)pplet傳遞的參數(shù)追加到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{
                                      
          // 根據(jù)Servlet返回的URL(ObjectStream)產(chǎn)生JasperPrint對象
                                      jasperPrint = (JasperPrint) obj;

                                  }

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


                                      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,現(xiàn)實(shí)中可以采用此種方式傳遞參數(shù)到applet中,下篇文章會介紹更合適的業(yè)務(wù)數(shù)據(jù)傳遞,?printView=true表示,傳遞printView參數(shù)對應(yīng)的值為true,用來預(yù)覽使用。剩下的工作就是怎么按照自己的要求打印和預(yù)覽了。
           jasperReport為我們提供了打印和預(yù)覽現(xiàn)成的方法:
          // 打印報(bào)表
                                              JasperPrintManager
                                                      .printReport(print, 
          false);

          /*  預(yù)覽報(bào)表
                                       * 調(diào)用JasperReport.jar中JasperViewer繪制報(bào)表Frame
                                       * JasperViewer繼承自JFrame,采用setDefaultCloseOperation響應(yīng)關(guān)閉窗口事件
                                       
          */

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

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

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

          <2009年11月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(11)

          我參與的團(tuán)隊(duì)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          新聞分類

          新聞檔案

          收藏夾

          圍脖

          最新隨筆

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 桃江县| 松原市| 军事| 通渭县| 辉南县| 杨浦区| 扎囊县| 揭西县| 陆河县| 板桥市| 阜平县| 海盐县| 翁牛特旗| 临猗县| 鄂温| 长子县| 米林县| 梁山县| 昌邑市| 喀喇沁旗| 泸溪县| 辽中县| 英吉沙县| 乐陵市| 巴楚县| 隆回县| 平顺县| 闵行区| 彰武县| 三明市| 龙川县| 天门市| 曲水县| 威宁| 宁夏| 崇信县| 高邑县| 邳州市| 临海市| 新邵县| 休宁县|