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
          提起scriptlet就不能不聯(lián)想到它的強(qiáng)大功能,jasperReport也是支持scriptlet的哦,先分析一下JasperReport的API吧!
          在填充報(bào)表時(shí)scriplet是一個(gè)非常有力的工具,JRAbstractScriptlet.java位于net.sf.jasperreports.engine包下是一個(gè)抽象



          beforeReportInit() ,afterReportInit() ,beforePageInit(),afterPageInit(), beforeColumnInit(), afterColumnInit() ,beforeGroupInit(String groupName),afterGroupInit(String groupName) 
          看看這些名字就知道你能完成那些功能,這幾個(gè)方法是要求我們實(shí)現(xiàn)的,jasperReport給我們提供了一個(gè)實(shí)現(xiàn)類JRDefaultScriptlet.java,默認(rèn)的空實(shí)現(xiàn)了上面幾個(gè)方法,它只是很便利的為我們提供了所需的八個(gè)方法的空實(shí)現(xiàn)。我們寫(xiě)自己的scriptlet時(shí)需要繼承JRDefaultScriptlet.java這個(gè)類實(shí)現(xiàn)自己的相應(yīng)的功能即可。
           先來(lái)看一個(gè)簡(jiǎn)單的例子:
          先看看模板文件的處理:
          新建時(shí)填寫(xiě)的這個(gè)類是下面我們要介紹的繼承自JRDefaultScriptlet.java類,也就是在模板文件中我們要加上如下代碼
          scriptletClass="org.bulktree.ireport.scriptlet.ScriptletReportDemo"
          完整的模板文件如下:scriptletDemo.jrxml
          <?xml version="1.0" encoding="UTF-8"  ?>
          <!-- Created with iReport - A designer for JasperReports -->
          <!DOCTYPE jasperReport PUBLIC "http://JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
          <jasperReport
                   
          name="scriptletDemo"
                   columnCount
          ="1"
                   printOrder
          ="Vertical"
                   orientation
          ="Portrait"
                   pageWidth
          ="595"
                   pageHeight
          ="842"
                   columnWidth
          ="535"
                   columnSpacing
          ="0"
                   leftMargin
          ="30"
                   rightMargin
          ="30"
                   topMargin
          ="20"
                   bottomMargin
          ="20"
                   whenNoDataType
          ="NoPages"
                   scriptletClass
          ="org.bulktree.ireport.scriptlet.ScriptletReportDemo"
                   isTitleNewPage
          ="false"
                   isSummaryNewPage
          ="false">
              
          <property name="ireport.scriptlethandling" value="2" />
              
          <property name="ireport.encoding" value="UTF-8" />
              
          <import value="java.util.*" />
              
          <import value="net.sf.jasperreports.engine.*" />
              
          <import value="net.sf.jasperreports.engine.data.*" />

              
          <parameter name="ReportTitle" isForPrompting="true" class="java.lang.String"/>

                  
          <background>
                      
          <band height="0"  isSplitAllowed="true" >
                      
          </band>
                  
          </background>
                  
          <title>
                      
          <band height="20"  isSplitAllowed="true" >
                          
          <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
                              
          <reportElement
                                  
          mode="Opaque"
                                  x
          ="193"
                                  y
          ="0"
                                  width
          ="134"
                                  height
          ="18"
                                  backcolor
          ="#FFCC33"
                                  key
          ="textField"/>
                              
          <box></box>
                              
          <textElement textAlignment="Center" verticalAlignment="Middle">
                                  
          <font pdfFontName="Helvetica-Bold" size="12" isBold="true"/>
                              
          </textElement>
                          
          <textFieldExpression   class="java.lang.String"><![CDATA[$P{ReportTitle}]]></textFieldExpression>
                          
          </textField>
                      
          </band>
                  
          </title>
                  
          <pageHeader>
                      
          <band height="0"  isSplitAllowed="true" >
                      
          </band>
                  
          </pageHeader>
                  
          <columnHeader>
                      
          <band height="0"  isSplitAllowed="true" >
                      
          </band>
                  
          </columnHeader>
                  
          <detail>
                      
          <band height="264"  isSplitAllowed="true" >
                          
          <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
                              
          <reportElement
                                  
          x="85"
                                  y
          ="20"
                                  width
          ="329"
                                  height
          ="61"
                                  forecolor
          ="#FF0099"
                                  key
          ="textField-1"/>
                              
          <box></box>
                              
          <textElement textAlignment="Center" verticalAlignment="Middle">
                                  
          <font pdfFontName="Helvetica-Bold" size="20" isBold="true"/>
                              
          </textElement>
                          
          <textFieldExpression   class="java.lang.String"><![CDATA[$P{REPORT_SCRIPTLET}.showInfor()]]></textFieldExpression>
                          
          </textField>
                      
          </band>
                  
          </detail>
                  
          <columnFooter>
                      
          <band height="0"  isSplitAllowed="true" >
                      
          </band>
                  
          </columnFooter>
                  
          <pageFooter>
                      
          <band height="0"  isSplitAllowed="true" >
                      
          </band>
                  
          </pageFooter>
                  
          <summary>
                      
          <band height="50"  isSplitAllowed="true" >
                      
          </band>
                  
          </summary>
          </jasperReport>
          下來(lái)看看怎么實(shí)現(xiàn)我們自己的scriplet

          ScriptletReportDemo.java
          package org.bulktree.ireport.scriptlet;

          import net.sf.jasperreports.engine.JRDefaultScriptlet;
          import net.sf.jasperreports.engine.JRScriptletException;

          /**
           * 
           * 
          @author bulktree Email: laoshulin@gmail.com
           * @Nov 26, 2008
           
          */

          public class ScriptletReportDemo extends JRDefaultScriptlet {

              @Override
              
          public void afterColumnInit() throws JRScriptletException {
                  System.out.println(
          "**************************************afterColumnInit()**************************************");
              }


              @Override
              
          public void afterDetailEval() throws JRScriptletException {
                  System.out.println(
          "**************************************afterDetailEval()**************************************");
              }


              @Override
              
          public void afterGroupInit(String groupName) throws JRScriptletException {
                  System.out.println(
          "**************************************afterDetailEval()**************************************");
              }


              @Override
              
          public void afterPageInit() throws JRScriptletException {
                  System.out.println(
          "**************************************afterPageInit()**************************************");
              }


              @Override
              
          public void afterReportInit() throws JRScriptletException {
                  System.out.println(
          "**************************************afterReportInit() begin**************************************");
                  
                  String str 
          = (String) this.getParameterValue("ReportTitle");
                  System.out.println(
          "report title=====>>>>"+str);
                  
                  str 
          += str.subSequence(0, str.length()-2);
                  
          this.setParameterValue("ReportTitle", str);
                  System.out.println(
          "**************************************afterReportInit() end**************************************");
              }


              @Override
              
          public void beforeColumnInit() throws JRScriptletException {
                  System.out.println(
          "**************************************beforeColumnInit()**************************************");
              }


              @Override
              
          public void beforeDetailEval() throws JRScriptletException {
                  System.out.println(
          "**************************************beforeDetailEval()**************************************");
              }


              @Override
              
          public void beforeGroupInit(String groupName) throws JRScriptletException {
                  System.out.println(
          "**************************************beforeGroupInit()**************************************");
              }


              @Override
              
          public void beforePageInit() throws JRScriptletException {
                  System.out.println(
          "**************************************beforePageInit()**************************************");
              }


              @Override
              
          public void beforeReportInit() throws JRScriptletException {
                  System.out.println(
          "**************************************beforeReportInit()**************************************");
              }


              
          public String showInfor() throws JRScriptletException {
                  
          return "the is scriptlet scriptlet scriptlet the,sscriptlet report the is ascriptlet report this is a scriptlet report this is a scriptlet report";
              }

              
          }

          這段代碼最后一個(gè)方法是我們自己的加的,用來(lái)在報(bào)表上顯示一段文本。我們知道對(duì)于一個(gè)Field、Parameter、Variable,JasperReport分別采用$F{FieldName}、$P{Parametername}、$V{VariableName}來(lái)引用,而如果要引用ScriptletReportDemo.java類的showInfor()返回字符串顯示在報(bào)表上,看看這個(gè)就知道了

          在afterReportInit方法中我們把parameter字段取出來(lái)前后添上五個(gè)*號(hào)再set進(jìn)去
              下來(lái)寫(xiě)一個(gè)test類測(cè)試一下:
          package org.bulktree.ireport.scriptlet;

          import java.io.File;
          import java.io.FileInputStream;
          import java.io.InputStream;
          import java.util.HashMap;

          import net.sf.jasperreports.engine.JREmptyDataSource;
          import net.sf.jasperreports.engine.JasperCompileManager;
          import net.sf.jasperreports.engine.JasperFillManager;
          import net.sf.jasperreports.engine.JasperPrint;
          import net.sf.jasperreports.engine.JasperReport;
          import net.sf.jasperreports.view.JasperViewer;

          /**
           * 
           * 
          @author bulktree Email: laoshulin@gmail.com
           * @Nov 27, 2008
           
          */

          public class ScriptletTestMain {

              
          public static void main(String[] args) {
                  String path 
          = "D:/workspace/scriptletDemo.jrxml";

                  File file 
          = new File(path);
                  InputStream in;
                  
          try {

                      HashMap parameters 
          = new HashMap();
                      parameters.put(
          "ReportTitle""LAOSHULIN");
                      in 
          = new FileInputStream(file);
                      JasperReport jasperReport 
          = JasperCompileManager.compileReport(in);
                      JasperPrint jasperPrint 
          = JasperFillManager.fillReport(jasperReport,
                              parameters, 
          new JREmptyDataSource());
                      JasperViewer viewer 
          = new JasperViewer(jasperPrint);
                      viewer.setVisible(
          true);

                  }
           catch (Exception e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }


              }

          }


          效果不錯(cuò)吧:




          posted on 2008-12-17 10:00 凌晨風(fēng) 閱讀(7688) 評(píng)論(6)  編輯  收藏 所屬分類: iReport + JasperReport 系列

          FeedBack:
          # re: iReport+jasperReport之scriptlet
          2008-12-18 10:48 |
          挺不錯(cuò)的,最近項(xiàng)目用到了jasper,學(xué)習(xí)了!謝謝!  回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之scriptlet
          2009-01-14 18:38 | 夢(mèng)想在這里起飛
          全部都是api級(jí)別的研究,厲害

          iReport中文網(wǎng)
          http://ireport.cubebi.com

            回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之scriptlet
          2009-07-10 14:01 | s
          受教受教,謝謝謝謝  回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之scriptlet
          2009-11-10 17:23 | jyp
          .jrxml文件存放的位置與scriptlet文件存放的位置有什么具體的要求么?
          我的scriptlet文件與jrxml文件存放在一個(gè)目錄卻編譯不過(guò),樓主能幫忙看看么?謝謝。
          net.sf.jasperreports.engine.JRException: Error loading byte data : F:\workspace\jasper_generator\script_demo_1257844389343_177585.class

          Caused by: java.io.FileNotFoundException: F:\workspace\jasper_generator\script_demo_1257844389343_177585.class (系統(tǒng)找不到指定的文件。)  回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之scriptlet
          2009-11-11 09:02 | 凌晨風(fēng)
          scriptlet文件應(yīng)該是編譯到j(luò)ar里去了,只要classpath可以找到就行了,jrxml文件是由你指定給程序的  回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之scriptlet
          2013-04-13 15:40 | 夜幕
          @凌晨風(fēng)
          你好,我最近就在做報(bào)表,編譯時(shí)總是找不到net.sf......下的實(shí)現(xiàn)scriptlet的那個(gè)類的classpath,請(qǐng)問(wèn)怎么樣把scriptlet文件編譯到j(luò)ar里去,以及irepot如何找到classpath.謝謝  回復(fù)  更多評(píng)論
            

          <2008年12月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(11)

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

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          新聞分類

          新聞檔案

          收藏夾

          圍脖

          最新隨筆

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 福州市| 麻江县| 黎川县| 新源县| 祁东县| 红桥区| 灵丘县| 磴口县| 启东市| 手机| 黎城县| 靖边县| 蓬安县| 宝应县| 都安| 尼勒克县| 松潘县| 阜宁县| 临沧市| 承德县| 益阳市| 宜君县| 奉贤区| 德阳市| 和田市| 海安县| 枣庄市| 乐业县| 祥云县| 山阴县| 图片| 公主岭市| 钟祥市| 黄冈市| 松溪县| 黄梅县| 栾城县| 镇远县| 铜陵市| 阿巴嘎旗| 谢通门县|