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

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 凌晨風 閱讀(7687) 評論(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)

    我參與的團隊

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    新聞分類

    新聞檔案

    收藏夾

    圍脖

    最新隨筆

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲成av人片天堂网老年人| 亚洲av无码专区在线电影天堂| 日韩免费高清视频网站| 青青青国产手机频在线免费观看| 老牛精品亚洲成av人片| 亚洲伊人久久大香线蕉啊| 亚洲av鲁丝一区二区三区| 亚洲中久无码不卡永久在线观看| 在线观看免费人成视频色9| 久久久精品免费视频| 国产成人无码免费网站| WWW国产亚洲精品久久麻豆| 中文字幕亚洲码在线| 亚洲高清无在码在线电影不卡| 亚洲熟妇中文字幕五十中出| 国产猛烈高潮尖叫视频免费| 女人18毛片水真多免费播放| 亚洲精品视频在线观看免费| 久久久免费的精品| 99热这里有免费国产精品| 成全在线观看免费观看大全| 99久久免费国产特黄| 国产线视频精品免费观看视频| 一区二区免费国产在线观看| 国产成人精品久久亚洲高清不卡| 亚洲精品无码国产片| 狠狠色伊人亚洲综合网站色| 亚洲 日韩经典 中文字幕 | 中国精品一级毛片免费播放| 男女作爱免费网站| 污污免费在线观看| 免费看一级一级人妻片 | 日韩在线视频免费看| 好大好硬好爽免费视频| 老司机永久免费网站在线观看| 四虎影视www四虎免费| 欧洲精品免费一区二区三区| 国产美女被遭强高潮免费网站| 午夜一级免费视频| 免费观看亚洲人成网站| 亚洲国产av无码精品|