解決Jasperreport的web 套打

           

          前段時(shí)間寫了一篇 解決Jasperreportweb打印另一種方法http://www.aygfsteel.com/three-3/archive/2010/06/24/324329.html 
          關(guān)于在web中的打印 套打是經(jīng)常被提到的,這個(gè)需求很廣泛,中間忙了一些其他的事情,到今天才把在Jasperreport實(shí)現(xiàn)web套打的內(nèi)容整理好。

          在讀這篇文章之前最好先讀一下上一篇文章,里面有些設(shè)計(jì)到jatoolsprinter的內(nèi)容需要了解一下。

                  下面開始講述一下整個(gè)套打的過程

          1:首先用ireport制作一張?zhí)状虻膱?bào)表如下圖


           

          如下模板所示 在一個(gè)image組件上放上要打印的內(nèi)容,我這里的演示是從數(shù)據(jù)庫中取到的字段打印出來。



           

          至于ireport模板的制作,我這里不做介紹,因?yàn)槲易约阂矝]有接觸多久,會(huì)的不一定比你多。

           

          2:創(chuàng)建JSP文件 代碼如下

          <%@ page language="java" contentType="text/html; charset=utf-8"
              pageEncoding
          ="utf-8"%>
          <%@ page import="net.sf.jasperreports.engine.*"%>
          <%@ page import="java.util.*"%>
          <%@ page import="java.io.*"%>
          <%@ page import="java.sql.*"%>
          <%@ page import="net.sf.jasperreports.engine.util.*"%>
          <%@ page import="net.sf.jasperreports.engine.export.*"%>

          <html>
              
          <head>
                  
          <!-- 插入打印控件 -->
                  
          <OBJECT ID="jatoolsPrinter"
                      CLASSID
          ="CLSID:B43D3361-D975-4BE2-87FE-057188254255"
                      codebase
          ="jatoolsPrinter.cab#version=5,3,0,0"></OBJECT>
              
          </head>
              
          <script type="text/javascript">
           function doPrint(how)
                          

                          
          //打印文檔對象
                          var myDoc =
                              
          {
                              settings:
                                  
          {
                                  pageWidth: 
          2100,    //自定義紙張寬度(單位為十分之一毫米)
                                  pageHeight: 1400,  //自定義紙張高度(單位為十分之一毫米)
                                  orientation: 1     //打印方向
                                  }
          ,
                              enableScreenOnlyClass:
          true// 使所有使用 screen-only 樣式類的對象,只在預(yù)覽、顯示時(shí)可見,打印時(shí)隱藏
                              documents: document, // 打印頁面(div)們在本文檔中
                              marginIgnored: true,
                             settingsID: 
          'mydocc'//打印設(shè)置的ID保存在注冊表中
                              copyrights: '杰創(chuàng)軟件擁有版權(quán)   www.jatools.com' // 版權(quán)聲明必須
                              }
          ;
              
          // 調(diào)用打印方法
              if(how == '打印預(yù)覽')
                  jatoolsPrinter.printPreview(myDoc,
          true );   // 打印預(yù)覽
                           
                 
          else if(how == '打印')
                     jatoolsPrinter.print(myDoc ,
          true);   // 打印前彈出打印設(shè)置對話框
                          
                 
          else
                     jatoolsPrinter.print(myDoc ,
          false);       // 不彈出對話框打印
          }

          </script>
              
          <body bgcolor="white">

                  
          <br>
                  
          <input type="button" value="打印預(yù)覽" onClick="doPrint('打印預(yù)覽')">
                  
          <input type="button" value="打印" onClick="doPrint('打印')">
                  
          <input type="button" value="打印" onClick="doPrint('打印')">
                  
          <br>




                  
          <%
                              File reportFile 
          = new File(application
                              .getRealPath(
          "/jasper/taoda.jasper"));
                      JasperReport jasperReport 
          = (JasperReport) JRLoader
                              .loadObject(reportFile.getPath());
                      Map parameters 
          = new HashMap();

                      Class.forName(
          "com.mysql.jdbc.Driver");
                      Connection conn 
          = DriverManager.getConnection(
                              
          "jdbc:mysql://localhost:3306/DataName""user""password");
                      JasperPrint jasperPrint 
          = JasperFillManager.fillReport(
                              jasperReport, parameters, conn);

                      JRXhtmlExporter exporter 
          = new JRXhtmlExporter();
                      StringBuffer sbuffer 
          = new StringBuffer();

                      Map imagesMap 
          = new HashMap();
                      session.setAttribute(
          "IMAGES_MAP", imagesMap);

                      exporter
                              .setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
                      exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
                      exporter
                              .setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
                      String imgServDirUrl 
          = "/images/";
                      File imgRealDir 
          = new File(request.getRealPath(File.separator)
                              
          + imgServDirUrl);
                      
          if (!imgRealDir.exists()) {
                          imgRealDir.mkdirs();
                      }

                      exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request
                              .getContextPath()
                              
          + imgServDirUrl);
                      exporter.setParameter(JRHtmlExporterParameter.IMAGES_DIR,
                              imgRealDir);
                      exporter.setParameter(
                              JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR,
                              Boolean.TRUE);

                      exporter.setParameter(
                              JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,
                              Boolean.FALSE);
                      exporter.exportReport();
                      conn.close();
                  
          %>


          其中以下內(nèi)容為jatoolsprinter所需代碼

          <OBJECT ID="jatoolsPrinter"
                      CLASSID
          ="CLSID:B43D3361-D975-4BE2-87FE-057188254255"
                      codebase
          ="jatoolsPrinter.cab#version=5,3,0,0"></OBJECT>



          function doPrint(how)
                          

                          
          //打印文檔對象
                          var myDoc =
                              
          {
                              settings:
                                  
          {
                                  pageWidth: 
          2100,    //自定義紙張寬度(單位為十分之一毫米)
                                  pageHeight: 1400,  //自定義紙張高度(單位為十分之一毫米)
                                  orientation: 1     //打印方向
                                  }
          ,
                              enableScreenOnlyClass:
          true// 使所有使用 screen-only 樣式類的對象,只在預(yù)覽、顯示時(shí)可見,打印時(shí)隱藏
                              documents: document, // 打印頁面(div)們在本文檔中
                              marginIgnored: true,
                             settingsID: 
          'mydocc'//打印設(shè)置的ID保存在注冊表中
                              copyrights: '杰創(chuàng)軟件擁有版權(quán)   www.jatools.com' // 版權(quán)聲明必須
                              }
          ;
              
          // 調(diào)用打印方法
              if(how == '打印預(yù)覽')
                  jatoolsPrinter.printPreview(myDoc,
          true );   // 打印預(yù)覽
                           
                 
          else if(how == '打印')
                     jatoolsPrinter.print(myDoc ,
          true);   // 打印前彈出打印設(shè)置對話框
                          
                 
          else
                     jatoolsPrinter.print(myDoc ,
          false);       // 不彈出對話框打印


           

          起先在在jasperreprot中輸出格式為html 背景圖一直不顯示,單獨(dú)放一張圖片,圖片上不要有其他組件,就會(huì)顯示,一直沒搞清楚這個(gè)問題是什么原因,但是輸出格式為xhtml的時(shí)候圖片就會(huì)顯示。


           

          3:修改JRXhtmlExporter代碼


           

          根據(jù)jatoolsprinter的規(guī)范,需要在打印的內(nèi)容的div 命名規(guī)則必須為<div id='page'+數(shù)字>

          Jasperreport是利用<a name="JR_PAGE_ANCHOR_?_?"></a>來區(qū)分頁數(shù)所以我們在代碼中找到輸出JR_PAGE_ANCHOR_?_? 的位置在他之后加上

          writer.write("<div id='page"+ (pageIndex + 1)+"'>"n");

              exportPage(page);

          writer.write("</div>"n");


           

          4:預(yù)覽可見,打印不可見。

          這樣打印的頁面jatoolsprinter就可以找到了。可是還有個(gè)問題,套打一般的問題都是希望那個(gè)底圖在預(yù)覽的時(shí)候可見而打印的時(shí)候不打印,那么這個(gè)問題在jatoolsprinter中是這樣處理的。

          找到輸出img信息的位置如下圖



           

          在輸出img 的信息中添加 writer.write(" class=\"screen-only\"");現(xiàn)在底圖就不會(huì)被打印出來了。

          5:啟動(dòng)tomcatweb下運(yùn)行



           

          點(diǎn)擊打印預(yù)覽




          最后打印效果如下




           

          這篇文章只是對在JsperReport中進(jìn)行套打進(jìn)行了介紹。套打當(dāng)中還會(huì)設(shè)計(jì)到其他的一些問題可以參照早先錄的一個(gè)視頻一步一步教你做web套打(http://www.56.com/u11/v_NTA2MjcyMDM.html),這個(gè)就和JsperReport沒有任何關(guān)系了。



           

          posted on 2010-07-27 09:24 楊慕 閱讀(15260) 評論(5)  編輯  收藏 所屬分類: J2EE

          評論

          # re: 解決Jasperreport的web 套打 2011-03-18 11:17 清風(fēng)劍客

          不錯(cuò),但樓主好像沒有說如何讓預(yù)覽時(shí)顯示Image組件的圖像,而打印時(shí)不打印圖像。  回復(fù)  更多評論   

          # re: 解決Jasperreport的web 套打 2011-03-23 17:29 類風(fēng)

          不明白模板文件jasper中的image怎么定義和設(shè)置參數(shù),希望樓主給個(gè)模板文件參考一下,謝謝!  回復(fù)  更多評論   

          # re: 解決Jasperreport的web 套打 2011-07-25 14:28 阿斯蒂芬

          jatoolsprinter是收費(fèi)的,所以還是放棄吧。。。。。。。。。。。  回復(fù)  更多評論   

          # re: 解決Jasperreport的web 套打 2013-07-29 15:05 gdTo

          貌似最近又出了一個(gè)免費(fèi)版的,還是不錯(cuò)的~~贊一個(gè)  回復(fù)  更多評論   

          # re: 解決Jasperreport的web 套打[未登錄] 2016-06-03 16:58 張三

          殺殺菌的卡是打算  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2016年6月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類(3)

          隨筆檔案(3)

          文章檔案(11)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 隆子县| 蒙阴县| 昌江| 瑞金市| 抚顺县| 阳泉市| 奉节县| 平遥县| 平乐县| 金坛市| 凤山县| 商洛市| 长阳| 宝丰县| 张家口市| 洞头县| 石棉县| 凭祥市| 义马市| 武汉市| 利津县| 邓州市| 循化| 涟水县| 友谊县| 银川市| 武鸣县| 华宁县| 德庆县| 乐都县| 周至县| 延吉市| 个旧市| 徐水县| 富平县| 定边县| 巴楚县| 中卫市| 类乌齐县| 永吉县| 潞城市|