脚本是一个java类,它用来执行指定的细节在打印期间。脚本中的一些方法被报表引擎的调用,当一些特殊的事件,像创建一个新页或者处理detail 行。
实现一个脚本得继承net.sf.jasperreports.engine.JRAbstractScriptlet类。 net.sf.jasperreports.engine.JRAbstractScriptlet的声明如下: package net.sf.jasperreports.engine; /**
* @author Teodor Danciu (teodord@users.sourceforge.net)
* @version $Id: JRDefaultScriptlet.java,v 1.3 2004/06/01 20:28:22 teodord Exp $ */
public class JRDefaultScriptlet extends JRAbstractScriptlet {
public JRDefaultScriptlet() { }
public void beforeReportInit() throws JRScriptletException { }
public void afterReportInit() throws JRScriptletException { }
public void beforePageInit() throws JRScriptletException { }
public void afterPageInit() throws JRScriptletException { }
public void beforeColumnInit() throws JRScriptletException { }
public void afterColumnInit() throws JRScriptletException {
}
public void beforeGroupInit(String groupName) throws JRScriptletException { }
public void afterGroupInit(String groupName) throws JRScriptletException { }
public void beforeDetailEval() throws JRScriptletException { }
public void afterDetailEval() throws JRScriptletException { } }
在ireport中如何配制脚本?
Ireport默认不使用脚本,我们可以如下操作,使它使用脚本。 首先新建一个报表文档,报表名TestScriptlet
然后点Edit -> Report Properties -> Scriptlet Class -> Use ireport internal scriptlet support
此时ireport已经使用了一个内部定义好的脚本,该脚本是个空壳子,没有实现任何功能。 我们也可以编辑该脚本类,如下操作:
点Edit -> Scriptlet Editor,此时会弹出一个编辑脚本类的窗口,找到该脚本构造方法,在构造方法中添加一条语句:System.out.println(“create scriptlet…”); 在构造方法下面添加一个max方法,整个代码如下所示: import net.sf.jasperreports.engine.*;
public class
/** Creates a new instance of JRIreportDefaultScriptlet */ public
System.out.println(\}
public int max(int a,int b) { if(a>=b) return a; return b; } }
然后点Save保存,即创建了一个脚本,并再保存报表文件,此时你可以到报表文件目录找到一个TestScriptleScriptlet的java文件,这就是ireport自动生成的脚本类文件(脚本类名= 报表名+Scriptlet)。 在ireport中如何调用脚本?
在报表创建时jasperreports会自动创建脚本对象,并在生成脚本时,jasperreports会自动调用相应的脚本方法,自定义的方法需要我们手动调用才会执行。 例调用上面的max方法,可使用表达式:
((TestScriptletScriptlet)$P{REPORT_SCRIPTLET}).max ( 23,64) $P{REPORT_SCRIPTLET}返回当前报表的脚本类 大家可以根据以上表达式举一反三调用脚本。 在web项目中如何配制脚本?
当在web项目中使用脚本时,就不能按照上面的方式配制了,那样会找不到脚本类的。解决办法如下4步:
1.在ireport的lib目录下找到ireport.jar,将它引入到项目中。 2.将ireport自动生成的java文件复制到项目src目录下(打包也行)。 3.编译项目后,将该项目的classes目录添加到ireport的classpath中。
4.点Edit -> Report Properties -> Scriptlet Class -> Use this scriptlet class…,在下面的文本框输入脚本类名,如打了包,要输入包名,点OK,编译ireport。
7.子报表
未完待续...
8.图表(饼图,柱图,线图)
未完待续...
9.导出pdf,xls,html...
以下是我导出各种报表Servlet源代码,供大家参考! package servlet;
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.io.StringWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.HashMap; import java.util.Map;
import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import oracle.jdbc.driver.OracleDriver; import test.TestBeanDataSource;
import net.sf.jasperreports.engine.JRAbstractExporter; import net.sf.jasperreports.engine.JREmptyDataSource; import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.JasperRunManager; import net.sf.jasperreports.engine.base.JRBaseReport; import net.sf.jasperreports.engine.export.JExcelApiExporter; import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter; import net.sf.jasperreports.engine.export.JRXlsExporterParameter; import net.sf.jasperreports.engine.export.JRXmlExporter; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.j2ee.servlets.ImageServlet;
publicclass ExportReportServlet extends HttpServlet { /**
*Destructionoftheservlet.
*/