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
    歡迎走進(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)。我們寫自己的scriptlet時(shí)需要繼承JRDefaultScriptlet.java這個(gè)類實(shí)現(xiàn)自己的相應(yīng)的功能即可。
     先來看一個(gè)簡單的例子:
    先看看模板文件的處理:
    新建時(shí)填寫的這個(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>
    下來看看怎么實(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è)方法是我們自己的加的,用來在報(bào)表上顯示一段文本。我們知道對于一個(gè)Field、Parameter、Variable,JasperReport分別采用$F{FieldName}、$P{Parametername}、$V{VariableName}來引用,而如果要引用ScriptletReportDemo.java類的showInfor()返回字符串顯示在報(bào)表上,看看這個(gè)就知道了

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


        }

    }


    效果不錯(cuò)吧:




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

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

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

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

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

    常用鏈接

    留言簿(11)

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

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    新聞分類

    新聞檔案

    收藏夾

    圍脖

    最新隨筆

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 91精品成人免费国产片| 67194成手机免费观看| 91免费人成网站在线观看18| 午夜神器成在线人成在线人免费 | 欧洲一级毛片免费| 免费看一级做a爰片久久| 午夜亚洲AV日韩AV无码大全| 亚洲中文字幕无码久久| 在线看片免费人成视频久网下载| 一个人在线观看视频免费| 亚洲第一黄色网址| 亚洲伊人久久大香线蕉在观| WWW国产成人免费观看视频| 免费可以在线看A∨网站| 国产亚洲精品久久久久秋霞| 亚洲中文字幕久久久一区| 免费黄网站在线看| 可以免费观看一级毛片黄a| 亚洲精品亚洲人成在线观看麻豆 | 偷自拍亚洲视频在线观看| 一级毛片在线免费观看| 免费又黄又爽的视频| 亚洲国产成人精品无码区在线秒播| xxxxxx日本处大片免费看| 午夜爱爱免费视频| 亚洲伊人tv综合网色| 国产精品一区二区三区免费| 成年丰满熟妇午夜免费视频| 亚洲短视频男人的影院| 乱人伦中文视频在线观看免费| 国产成人免费爽爽爽视频| 久久久久亚洲AV无码专区首| 免费精品久久久久久中文字幕| 国产成人A在线观看视频免费| 久久精品国产亚洲| 天堂亚洲免费视频| 国产伦精品一区二区三区免费迷 | 国产精品一区二区三区免费| 国产做床爱无遮挡免费视频| 亚洲已满18点击进入在线观看| 日韩精品无码一区二区三区免费|