提起scriptlet就不能不联想到它的强大功能,jasperReport也是支持scriptlet的哦,先分析一下JasperReport的API吧!
在填充报表时scriplet是一个非常有力的工具,JRAbstractScriptlet.java位于net.sf.jasperreports.engine包下是一个抽象


iReport+jasperReport之scriptlet
beforeReportInit() ,afterReportInit() ,beforePageInit(),afterPageInit(), beforeColumnInit(), afterColumnInit() ,beforeGroupInit(String groupName),afterGroupInit(String groupName) 
看看这些名字就知道你能完成那些功能,这几个方法是要求我们实现的,jasperReport给我们提供了一个实现类JRDefaultScriptlet.java,默认的空实现了上面几个方法,它只是很便利的为我们提供了所需的八个方法的空实现。我们写自己的scriptlet时需要继承JRDefaultScriptlet.java这个类实现自己的相应的功能即可。
 先来看一个简单的例子:
先看看模板文件的处理:iReport+jasperReport之scriptlet
新建时填写的这个类是下面我们要介绍的继承自JRDefaultScriptlet.java类,也就是在模板文件中我们要加上如下代码
iReport+jasperReport之scriptletscriptletClass="org.bulktree.ireport.scriptlet.ScriptletReportDemo"
iReport+jasperReport之scriptlet
完整的模板文件如下:scriptletDemo.jrxml
iReport+jasperReport之scriptlet<?xml version="1.0" encoding="UTF-8"  ?>
iReport+jasperReport之scriptlet
<!-- Created with iReport - A designer for JasperReports -->
iReport+jasperReport之scriptlet
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
iReport+jasperReport之scriptlet
<jasperReport
iReport+jasperReport之scriptlet         
name="scriptletDemo"
iReport+jasperReport之scriptlet         columnCount
="1"
iReport+jasperReport之scriptlet         printOrder
="Vertical"
iReport+jasperReport之scriptlet         orientation
="Portrait"
iReport+jasperReport之scriptlet         pageWidth
="595"
iReport+jasperReport之scriptlet         pageHeight
="842"
iReport+jasperReport之scriptlet         columnWidth
="535"
iReport+jasperReport之scriptlet         columnSpacing
="0"
iReport+jasperReport之scriptlet         leftMargin
="30"
iReport+jasperReport之scriptlet         rightMargin
="30"
iReport+jasperReport之scriptlet         topMargin
="20"
iReport+jasperReport之scriptlet         bottomMargin
="20"
iReport+jasperReport之scriptlet         whenNoDataType
="NoPages"
iReport+jasperReport之scriptlet         scriptletClass
="org.bulktree.ireport.scriptlet.ScriptletReportDemo"
iReport+jasperReport之scriptlet         isTitleNewPage
="false"
iReport+jasperReport之scriptlet         isSummaryNewPage
="false">
iReport+jasperReport之scriptlet    
<property name="ireport.scriptlethandling" value="2" />
iReport+jasperReport之scriptlet    
<property name="ireport.encoding" value="UTF-8" />
iReport+jasperReport之scriptlet    
<import value="java.util.*" />
iReport+jasperReport之scriptlet    
<import value="net.sf.jasperreports.engine.*" />
iReport+jasperReport之scriptlet    
<import value="net.sf.jasperreports.engine.data.*" />
iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet    
<parameter name="ReportTitle" isForPrompting="true" class="java.lang.String"/>
iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet        
<background>
iReport+jasperReport之scriptlet            
<band height="0"  isSplitAllowed="true" >
iReport+jasperReport之scriptlet            
</band>
iReport+jasperReport之scriptlet        
</background>
iReport+jasperReport之scriptlet        
<title>
iReport+jasperReport之scriptlet            
<band height="20"  isSplitAllowed="true" >
iReport+jasperReport之scriptlet                
<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
iReport+jasperReport之scriptlet                    
<reportElement
iReport+jasperReport之scriptlet                        
mode="Opaque"
iReport+jasperReport之scriptlet                        x
="193"
iReport+jasperReport之scriptlet                        y
="0"
iReport+jasperReport之scriptlet                        width
="134"
iReport+jasperReport之scriptlet                        height
="18"
iReport+jasperReport之scriptlet                        backcolor
="#FFCC33"
iReport+jasperReport之scriptlet                        key
="textField"/>
iReport+jasperReport之scriptlet                    
<box></box>
iReport+jasperReport之scriptlet                    
<textElement textAlignment="Center" verticalAlignment="Middle">
iReport+jasperReport之scriptlet                        
<font pdfFontName="Helvetica-Bold" size="12" isBold="true"/>
iReport+jasperReport之scriptlet                    
</textElement>
iReport+jasperReport之scriptlet                
<textFieldExpression   class="java.lang.String"><![CDATA[$P{ReportTitle}]]></textFieldExpression>
iReport+jasperReport之scriptlet                
</textField>
iReport+jasperReport之scriptlet            
</band>
iReport+jasperReport之scriptlet        
</title>
iReport+jasperReport之scriptlet        
<pageHeader>
iReport+jasperReport之scriptlet            
<band height="0"  isSplitAllowed="true" >
iReport+jasperReport之scriptlet            
</band>
iReport+jasperReport之scriptlet        
</pageHeader>
iReport+jasperReport之scriptlet        
<columnHeader>
iReport+jasperReport之scriptlet            
<band height="0"  isSplitAllowed="true" >
iReport+jasperReport之scriptlet            
</band>
iReport+jasperReport之scriptlet        
</columnHeader>
iReport+jasperReport之scriptlet        
<detail>
iReport+jasperReport之scriptlet            
<band height="264"  isSplitAllowed="true" >
iReport+jasperReport之scriptlet                
<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
iReport+jasperReport之scriptlet                    
<reportElement
iReport+jasperReport之scriptlet                        
x="85"
iReport+jasperReport之scriptlet                        y
="20"
iReport+jasperReport之scriptlet                        width
="329"
iReport+jasperReport之scriptlet                        height
="61"
iReport+jasperReport之scriptlet                        forecolor
="#FF0099"
iReport+jasperReport之scriptlet                        key
="textField-1"/>
iReport+jasperReport之scriptlet                    
<box></box>
iReport+jasperReport之scriptlet                    
<textElement textAlignment="Center" verticalAlignment="Middle">
iReport+jasperReport之scriptlet                        
<font pdfFontName="Helvetica-Bold" size="20" isBold="true"/>
iReport+jasperReport之scriptlet                    
</textElement>
iReport+jasperReport之scriptlet                
<textFieldExpression   class="java.lang.String"><![CDATA[$P{REPORT_SCRIPTLET}.showInfor()]]></textFieldExpression>
iReport+jasperReport之scriptlet                
</textField>
iReport+jasperReport之scriptlet            
</band>
iReport+jasperReport之scriptlet        
</detail>
iReport+jasperReport之scriptlet        
<columnFooter>
iReport+jasperReport之scriptlet            
<band height="0"  isSplitAllowed="true" >
iReport+jasperReport之scriptlet            
</band>
iReport+jasperReport之scriptlet        
</columnFooter>
iReport+jasperReport之scriptlet        
<pageFooter>
iReport+jasperReport之scriptlet            
<band height="0"  isSplitAllowed="true" >
iReport+jasperReport之scriptlet            
</band>
iReport+jasperReport之scriptlet        
</pageFooter>
iReport+jasperReport之scriptlet        
<summary>
iReport+jasperReport之scriptlet            
<band height="50"  isSplitAllowed="true" >
iReport+jasperReport之scriptlet            
</band>
iReport+jasperReport之scriptlet        
</summary>
iReport+jasperReport之scriptlet
</jasperReport>
iReport+jasperReport之scriptlet
下来看看怎么实现我们自己的scriplet

ScriptletReportDemo.java
iReport+jasperReport之scriptletpackage org.bulktree.ireport.scriptlet;
iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet
import net.sf.jasperreports.engine.JRDefaultScriptlet;
iReport+jasperReport之scriptlet
import net.sf.jasperreports.engine.JRScriptletException;
iReport+jasperReport之scriptlet
iReport+jasperReport之scriptletiReport+jasperReport之scriptlet
/** *//**
iReport+jasperReport之scriptlet * 
iReport+jasperReport之scriptlet * 
@author bulktree Email: [email protected]
iReport+jasperReport之scriptlet * @Nov 26, 2008
iReport+jasperReport之scriptlet 
*/

iReport+jasperReport之scriptletiReport+jasperReport之scriptlet
public class ScriptletReportDemo extends JRDefaultScriptlet iReport+jasperReport之scriptlet{
iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet    @Override
iReport+jasperReport之scriptletiReport+jasperReport之scriptlet    
public void afterColumnInit() throws JRScriptletException iReport+jasperReport之scriptlet{
iReport+jasperReport之scriptlet        System.out.println(
"**************************************afterColumnInit()**************************************");
iReport+jasperReport之scriptlet    }

iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet    @Override
iReport+jasperReport之scriptletiReport+jasperReport之scriptlet    
public void afterDetailEval() throws JRScriptletException iReport+jasperReport之scriptlet{
iReport+jasperReport之scriptlet        System.out.println(
"**************************************afterDetailEval()**************************************");
iReport+jasperReport之scriptlet    }

iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet    @Override
iReport+jasperReport之scriptletiReport+jasperReport之scriptlet    
public void afterGroupInit(String groupName) throws JRScriptletException iReport+jasperReport之scriptlet{
iReport+jasperReport之scriptlet        System.out.println(
"**************************************afterDetailEval()**************************************");
iReport+jasperReport之scriptlet    }

iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet    @Override
iReport+jasperReport之scriptletiReport+jasperReport之scriptlet    
public void afterPageInit() throws JRScriptletException iReport+jasperReport之scriptlet{
iReport+jasperReport之scriptlet        System.out.println(
"**************************************afterPageInit()**************************************");
iReport+jasperReport之scriptlet    }

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

iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet    @Override
iReport+jasperReport之scriptletiReport+jasperReport之scriptlet    
public void beforeColumnInit() throws JRScriptletException iReport+jasperReport之scriptlet{
iReport+jasperReport之scriptlet        System.out.println(
"**************************************beforeColumnInit()**************************************");
iReport+jasperReport之scriptlet    }

iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet    @Override
iReport+jasperReport之scriptletiReport+jasperReport之scriptlet    
public void beforeDetailEval() throws JRScriptletException iReport+jasperReport之scriptlet{
iReport+jasperReport之scriptlet        System.out.println(
"**************************************beforeDetailEval()**************************************");
iReport+jasperReport之scriptlet    }

iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet    @Override
iReport+jasperReport之scriptletiReport+jasperReport之scriptlet    
public void beforeGroupInit(String groupName) throws JRScriptletException iReport+jasperReport之scriptlet{
iReport+jasperReport之scriptlet        System.out.println(
"**************************************beforeGroupInit()**************************************");
iReport+jasperReport之scriptlet    }

iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet    @Override
iReport+jasperReport之scriptletiReport+jasperReport之scriptlet    
public void beforePageInit() throws JRScriptletException iReport+jasperReport之scriptlet{
iReport+jasperReport之scriptlet        System.out.println(
"**************************************beforePageInit()**************************************");
iReport+jasperReport之scriptlet    }

iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet    @Override
iReport+jasperReport之scriptletiReport+jasperReport之scriptlet    
public void beforeReportInit() throws JRScriptletException iReport+jasperReport之scriptlet{
iReport+jasperReport之scriptlet        System.out.println(
"**************************************beforeReportInit()**************************************");
iReport+jasperReport之scriptlet    }

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

iReport+jasperReport之scriptlet    
iReport+jasperReport之scriptlet}

iReport+jasperReport之scriptlet
这段代码最后一个方法是我们自己的加的,用来在报表上显示一段文本。我们知道对于一个Field、Parameter、Variable,JasperReport分别采用$F{FieldName}、$P{Parametername}、$V{VariableName}来引用,而如果要引用ScriptletReportDemo.java类的showInfor()返回字符串显示在报表上,看看这个就知道了iReport+jasperReport之scriptlet

在afterReportInit方法中我们把parameter字段取出来前后添上五个*号再set进去
    下来写一个test类测试一下:
iReport+jasperReport之scriptletpackage org.bulktree.ireport.scriptlet;
iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet
import java.io.File;
iReport+jasperReport之scriptlet
import java.io.FileInputStream;
iReport+jasperReport之scriptlet
import java.io.InputStream;
iReport+jasperReport之scriptlet
import java.util.HashMap;
iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet
import net.sf.jasperreports.engine.JREmptyDataSource;
iReport+jasperReport之scriptlet
import net.sf.jasperreports.engine.JasperCompileManager;
iReport+jasperReport之scriptlet
import net.sf.jasperreports.engine.JasperFillManager;
iReport+jasperReport之scriptlet
import net.sf.jasperreports.engine.JasperPrint;
iReport+jasperReport之scriptlet
import net.sf.jasperreports.engine.JasperReport;
iReport+jasperReport之scriptlet
import net.sf.jasperreports.view.JasperViewer;
iReport+jasperReport之scriptlet
iReport+jasperReport之scriptletiReport+jasperReport之scriptlet
/** *//**
iReport+jasperReport之scriptlet * 
iReport+jasperReport之scriptlet * 
@author bulktree Email: [email protected]
iReport+jasperReport之scriptlet * @Nov 27, 2008
iReport+jasperReport之scriptlet 
*/

iReport+jasperReport之scriptletiReport+jasperReport之scriptlet
public class ScriptletTestMain iReport+jasperReport之scriptlet{
iReport+jasperReport之scriptlet
iReport+jasperReport之scriptletiReport+jasperReport之scriptlet    
public static void main(String[] args) iReport+jasperReport之scriptlet{
iReport+jasperReport之scriptlet        String path 
= "D:/workspace/scriptletDemo.jrxml";
iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet        File file 
= new File(path);
iReport+jasperReport之scriptlet        InputStream in;
iReport+jasperReport之scriptletiReport+jasperReport之scriptlet        
try iReport+jasperReport之scriptlet{
iReport+jasperReport之scriptlet
iReport+jasperReport之scriptlet            HashMap parameters 
= 

相关文章: