iReport+jasperReport 之scriptlet

iReport+jasperReport 之scriptlet

标签: parameters报表stringencodingreport联想
2010-04-08 23:40 901人阅读 评论(0) 收藏 举报
本文章已收录于:

提起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 之scriptlet scriptletClass="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 之scriptletimport  net.sf.jasperreports.engine.JRDefaultScriptlet;
iReport+jasperReport 之scriptletimport  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 之scriptletpublic   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 之scriptletimport  java.io.File;
iReport+jasperReport 之scriptletimport  java.io.FileInputStream;
iReport+jasperReport 之scriptletimport  java.io.InputStream;
iReport+jasperReport 之scriptletimport  java.util.HashMap;
iReport+jasperReport 之scriptlet
iReport+jasperReport 之scriptletimport  net.sf.jasperreports.engine.JREmptyDataSource;
iReport+jasperReport 之scriptletimport  net.sf.jasperreports.engine.JasperCompileManager;
iReport+jasperReport 之scriptletimport  net.sf.jasperreports.engine.JasperFillManager;
iReport+jasperReport 之scriptletimport  net.sf.jasperreports.engine.JasperPrint;
iReport+jasperReport 之scriptletimport  net.sf.jasperreports.engine.JasperReport;
iReport+jasperReport 之scriptletimport  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 之scriptletpublic   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  =   new  HashMap();
iReport+jasperReport 之scriptlet             parameters.put( " ReportTitle " ,  " LAOSHULIN " );
iReport+jasperReport 之scriptlet             in  =   new  FileInputStream(file);
iReport+jasperReport 之scriptlet             JasperReport jasperReport  =  JasperCompileManager.compileReport(in);
iReport+jasperReport 之scriptlet             JasperPrint jasperPrint  =  JasperFillManager.fillReport(jasperReport,
iReport+jasperReport 之scriptlet                     parameters,  new  JREmptyDataSource());
iReport+jasperReport 之scriptlet             JasperViewer viewer  =   new  JasperViewer(jasperPrint);
iReport+jasperReport 之scriptlet             viewer.setVisible( true );
iReport+jasperReport 之scriptlet
iReport+jasperReport 之scriptletiReport+jasperReport 之scriptlet         }
  catch  (Exception e)  iReport+jasperReport 之scriptlet{
iReport+jasperReport 之scriptlet              //  TODO Auto-generated catch block
iReport+jasperReport 之scriptlet
            e.printStackTrace();
iReport+jasperReport 之scriptlet         }

iReport+jasperReport 之scriptlet
iReport+jasperReport 之scriptlet     }

iReport+jasperReport 之scriptlet }

iReport+jasperReport 之scriptlet


效果不错吧:

 

 

http://www.blogjava.NET/bulktree/archive/2008/12/17/246786.html