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

          jutleo
          歡迎走進有風的地方~~
          posts - 63,  comments - 279,  trackbacks - 0
          提起scriptlet就不能不聯想到它的強大功能,jasperReport也是支持scriptlet的哦,先分析一下JasperReport的API吧!
          在填充報表時scriplet是一個非常有力的工具,JRAbstractScriptlet.java位于net.sf.jasperreports.engine包下是一個抽象



          beforeReportInit() ,afterReportInit() ,beforePageInit(),afterPageInit(), beforeColumnInit(), afterColumnInit() ,beforeGroupInit(String groupName),afterGroupInit(String groupName) 
          看看這些名字就知道你能完成那些功能,這幾個方法是要求我們實現的,jasperReport給我們提供了一個實現類JRDefaultScriptlet.java,默認的空實現了上面幾個方法,它只是很便利的為我們提供了所需的八個方法的空實現。我們寫自己的scriptlet時需要繼承JRDefaultScriptlet.java這個類實現自己的相應的功能即可。
           先來看一個簡單的例子:
          先看看模板文件的處理:
          新建時填寫的這個類是下面我們要介紹的繼承自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>
          下來看看怎么實現我們自己的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";
              }

              
          }

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

          在afterReportInit方法中我們把parameter字段取出來前后添上五個*號再set進去
              下來寫一個test類測試一下:
          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();
                  }


              }

          }


          效果不錯吧:




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

          FeedBack:
          # re: iReport+jasperReport之scriptlet
          2008-12-18 10:48 |
          挺不錯的,最近項目用到了jasper,學習了!謝謝!  回復  更多評論
            
          # re: iReport+jasperReport之scriptlet
          2009-01-14 18:38 | 夢想在這里起飛
          全部都是api級別的研究,厲害

          iReport中文網
          http://ireport.cubebi.com

            回復  更多評論
            
          # re: iReport+jasperReport之scriptlet
          2009-07-10 14:01 | s
          受教受教,謝謝謝謝  回復  更多評論
            
          # re: iReport+jasperReport之scriptlet
          2009-11-10 17:23 | jyp
          .jrxml文件存放的位置與scriptlet文件存放的位置有什么具體的要求么?
          我的scriptlet文件與jrxml文件存放在一個目錄卻編譯不過,樓主能幫忙看看么?謝謝。
          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 (系統找不到指定的文件。)  回復  更多評論
            
          # re: iReport+jasperReport之scriptlet
          2009-11-11 09:02 | 凌晨風
          scriptlet文件應該是編譯到jar里去了,只要classpath可以找到就行了,jrxml文件是由你指定給程序的  回復  更多評論
            
          # re: iReport+jasperReport之scriptlet
          2013-04-13 15:40 | 夜幕
          @凌晨風
          你好,我最近就在做報表,編譯時總是找不到net.sf......下的實現scriptlet的那個類的classpath,請問怎么樣把scriptlet文件編譯到jar里去,以及irepot如何找到classpath.謝謝  回復  更多評論
            

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

          常用鏈接

          留言簿(11)

          我參與的團隊

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          新聞分類

          新聞檔案

          收藏夾

          圍脖

          最新隨筆

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 庆阳市| 惠州市| 米林县| 金平| 连城县| 古蔺县| 津市市| 桂阳县| 禄丰县| 登封市| 湛江市| 上思县| 胶州市| 正镶白旗| 晋城| 桃园市| 宣汉县| 万荣县| 蒙自县| 蛟河市| 福海县| 依安县| 毕节市| 青海省| 林甸县| 华坪县| 青铜峡市| 新化县| 吉隆县| 赤城县| 永吉县| 蛟河市| 内黄县| 日照市| 南汇区| 周宁县| 林西县| 麻阳| 社旗县| 周至县| 彭阳县|