解決Jasperreport的web 套打

           

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

          在讀這篇文章之前最好先讀一下上一篇文章,里面有些設計到jatoolsprinter的內容需要了解一下。

                  下面開始講述一下整個套打的過程

          1:首先用ireport制作一張套打的報表如下圖


           

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



           

          至于ireport模板的制作,我這里不做介紹,因為我自己也沒有接觸多久,會的不一定比你多。

           

          2:創建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 樣式類的對象,只在預覽、顯示時可見,打印時隱藏
                              documents: document, // 打印頁面(div)們在本文檔中
                              marginIgnored: true,
                             settingsID: 
          'mydocc'//打印設置的ID保存在注冊表中
                              copyrights: '杰創軟件擁有版權   www.jatools.com' // 版權聲明必須
                              }
          ;
              
          // 調用打印方法
              if(how == '打印預覽')
                  jatoolsPrinter.printPreview(myDoc,
          true );   // 打印預覽
                           
                 
          else if(how == '打印')
                     jatoolsPrinter.print(myDoc ,
          true);   // 打印前彈出打印設置對話框
                          
                 
          else
                     jatoolsPrinter.print(myDoc ,
          false);       // 不彈出對話框打印
          }

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

                  
          <br>
                  
          <input type="button" value="打印預覽" onClick="doPrint('打印預覽')">
                  
          <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();
                  
          %>


          其中以下內容為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 樣式類的對象,只在預覽、顯示時可見,打印時隱藏
                              documents: document, // 打印頁面(div)們在本文檔中
                              marginIgnored: true,
                             settingsID: 
          'mydocc'//打印設置的ID保存在注冊表中
                              copyrights: '杰創軟件擁有版權   www.jatools.com' // 版權聲明必須
                              }
          ;
              
          // 調用打印方法
              if(how == '打印預覽')
                  jatoolsPrinter.printPreview(myDoc,
          true );   // 打印預覽
                           
                 
          else if(how == '打印')
                     jatoolsPrinter.print(myDoc ,
          true);   // 打印前彈出打印設置對話框
                          
                 
          else
                     jatoolsPrinter.print(myDoc ,
          false);       // 不彈出對話框打印


           

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


           

          3:修改JRXhtmlExporter代碼


           

          根據jatoolsprinter的規范,需要在打印的內容的div 命名規則必須為<div id='page'+數字>

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

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

              exportPage(page);

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


           

          4:預覽可見,打印不可見。

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

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



           

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

          5:啟動tomcatweb下運行



           

          點擊打印預覽




          最后打印效果如下




           

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



           

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

          評論

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

          不錯,但樓主好像沒有說如何讓預覽時顯示Image組件的圖像,而打印時不打印圖像。  回復  更多評論   

          # re: 解決Jasperreport的web 套打 2011-03-23 17:29 類風

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

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

          jatoolsprinter是收費的,所以還是放棄吧。。。。。。。。。。。  回復  更多評論   

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

          貌似最近又出了一個免費版的,還是不錯的~~贊一個  回復  更多評論   

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

          殺殺菌的卡是打算  回復  更多評論   


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


          網站導航:
           
          <2016年6月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆分類(3)

          隨筆檔案(3)

          文章檔案(11)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 收藏| 汕头市| 丹东市| 育儿| 雷州市| 黄平县| 平邑县| 江门市| 潮州市| 武威市| 凤冈县| 惠水县| 鱼台县| 桐柏县| 宜阳县| 九江县| 怀来县| 博兴县| 宿松县| 威宁| 苍梧县| 鸡西市| 麻栗坡县| 德安县| 利津县| 绥德县| 茌平县| 武乡县| 威远县| 庄河市| 武陟县| 仁布县| 读书| 石狮市| 公安县| 肇源县| 孙吴县| 嘉义市| 平塘县| 湘潭市| 南召县|