- 浏览: 90048 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Ginger90:
其实大部分功能和帆软报表差不多,但是帆软报表编写起来更方便一些 ...
iReport+jasperReport之JFreeChart(图表报表) -
tiancaishan:
这只是最简单的主数据源,那子数据源怎么设置呢?
iReport+jasperReport之CSV、XML数据源 -
wangqiangcattsoft:
楼上源码只看了一半
Struts2整合JasperReport预览HTML格式不显示图片问题解决方案 -
tuan232311009:
不错!
黑莓开发学习入门系列,自己动手实现一个日历软件(六)
iReport+jasperReport之scriptlet
提起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类,也就是在模板文件中我们要加上如下代码
ScriptletReportDemo.java
在afterReportInit方法中我们把parameter字段取出来前后添上五个*号再set进去
下来写一个test类测试一下:
在填充报表时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 "//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<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//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>
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()返回字符串显示在报表上,看看这个就知道了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";
}
}
在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 =
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 =
发表评论
-
如何使用Static的变量和方法
2007-12-01 10:55 711如何使用Static的变量和方法有时你希望定义一个类成员 ... -
Transact-SQL简明语法
2007-12-01 11:02 1027最简单的查询语法格式: SELECT <列名&g ... -
去北京面试时的题目(老师生日)微软面试题
2007-12-01 19:59 1181小明和小强都是张老师的学生,张老师的生日是 M月 N日, 2人 ... -
有点象24点游戏,说说你的想法
2007-12-01 23:02 753* 5、5、5、1怎么能算出24呢? * ... -
JDK5增强for循环的使用
2007-12-02 23:43 785JDK5增强for循环的使用,此语法有很大的缺陷,仅适用于有限 ... -
Java中的多态
2007-12-03 11:26 791在实际操作中,多态可以让我不用关心某个对象到底是什么具体类型, ... -
运用线程实现时间更新
2007-12-06 11:01 751线程的做的时间表,不知道合不合适,哪位还有更好的实现方式(ja ... -
生产者消费者问题(以面包为例)
2007-12-10 19:48 760package Thread;public class Pr ... -
数据库关系表解决方案
2007-12-26 21:45 739数据库关系的表之间定义一个连接,而所定义连接的方式由表之 ... -
Struts2表单请求流程(一)
2007-12-29 20:09 855Struts2框架出来有段时间了,终于开始学习Struts了, ... -
Struts2表单请求流程(二)— Struts2高级的POJO访问
2007-12-29 20:20 1935此文主要来自www.blogjava.net/Max的实例 S ... -
开源软件逐渐走进了我的生活
2008-03-18 21:58 735看看我们经常用的软件吧! 以前经常去找一些破解的软件用,没有那 ... -
Struts2中select/doubleselect标签数据显示
2008-04-02 08:46 1089最近做毕业设计用到Struts2 的标签库,遇到一些比较复 ... -
用commons-email-1.1.jar实现发邮件功能:
2008-04-07 09:47 1085今天在Apache网站上下载commons-lang j ... -
JFreeChart简单使用
2008-04-18 09:29 875JFreeChart is a free chart libr ... -
Spring2.5.3+Hibernate3.2+Struts2.0.11整合
2008-04-18 13:59 894Spring2.5.3+Hibernate3.2+Struts ... -
java截取字符串的一些常用处理
2008-08-01 09:06 957java对字符串处理功能强大,以下是本人实际开发中用到的一些总 ... -
dom4j操作xml基础
2008-08-03 15:39 960DOM是用与平台和语言无关的方式表示XML文档 ... -
office javaScript调试工具
2008-08-05 18:21 914项目前台需要写大量的js,寻求一种有效 ... -
Visitor访问者模式---------学习dom4j时遇到的顺便拿来交流
2008-08-10 12:12 917dom4j遍历xml文档树有种很特别的方式就是访问者( ...
相关推荐
【标题】"ireport3中文用户手册+jasperreport 开发详细手册合集"涉及的是两款在Java报表开发领域中至关重要的工具:iReport和JasperReport。这两个工具是开源的,广泛用于创建复杂的报告和仪表板,使得数据可视化变...
2. **配置报表模板**:在iReport中打开报表模板(.jrxml文件),在`<jasperReport>`标签下添加`<scriptlet>`子标签,指定你的`Scriptlet`类: ```xml <jasperReport ...> ... <scriptlet class=...
通过iReport,你可以拖放字段、设置样式、创建复杂的计算公式,以及利用内置的脚本语言JasperReports Scriptlet进行更高级的定制。iReport支持版本控制,这对于团队协作非常有帮助。 在"JasperReport报表设计总结...
### IReport与JasperReport开发报表经验总结 在IT领域,报表工具的选择和使用对于数据分析、数据呈现至关重要。本文将基于“**IReport与JasperReport开发报表经验总结**”这一主题,对文档中提到的一些关键问题及其...
首先需要下载iReport和JasperReport的安装包,iReport的安装非常简单,解压后运行iReport.exe程序即可。而JasperReport则需要解压后将所需的jar包拷贝到项目中。iReport的安装依赖于Java虚拟机,如果尚未安装Java...
这里我们关注的是"IReport5.6&Jasperreport;开发报表所需全部jar.zip"这个压缩包,它包含了这两个工具在开发过程中所需的全部Java Archive (JAR) 文件。 JasperReports是一个强大的Java库,能够生成各种类型的报表...
### JasperReport 学习之路 #### 一、简介与背景 JasperReport是一种基于Java的报表生成技术,它被广泛应用于企业级应用中用于生成复杂且格式化良好的PDF文档。对于初学者而言,掌握JasperReport的核心概念和技术...
本文将详细介绍如何使用Ireport内置的Scriptlet功能实现将金额转换为大写的汉字表示,这对于财务报表的制作尤为重要,因为在中国,金额通常需要以中文大写的形式出现,以增加数据的准确性,防止篡改。 首先,我们要...
- **编写查询**:在查询编辑器中编写SQL或使用JasperReports内置的语言JasperReport Scriptlet。 - **预览和测试**:在预览模式下查看报表效果,进行调整和测试。 - **保存和导出**:保存报表模板,导出为所需格式。...
5. **表达式和变量**:掌握JasperReports的表达式语言JasperReport Scriptlet和变量,用于计算、过滤数据。 6. **报表元素**:学习如何创建表格、图表、子报表等复杂元素,以及如何进行交互式操作。 7. **导出和...
"EmployeeInfo.pdf"则代表生成的PDF格式报表,它是报表设计完成后常见的输出格式之一,方便打印或电子分发。 知识点详解: 1. **IReport简介**:IReport是JasperSoft Studio的早期版本,是基于Eclipse的报表设计...
是一款报表打印组件,是开放源代码组织 中的一个 报表打印工程, JasperReport sf.net 由于 本身并未提供很好的可视化报表设计工具, JasperReport 在之后推出了 iReport ,作为 报表模版编辑软件,具有以下突出的...
* 集成脚本(scriptlet)支持 * 内置图表支持:超过20种图表支持,并可扩展 * 国际化:集成超过15种语言 * 报表模板与报表库样式管理 * 源文件的备份 * 文档结构浏览器 iReport的安装 iReport运行时需要Sun Java2 ...
设计者可以利用内置的样式和表达式语言(JasperReports Scriptlet Language)来实现动态计算和格式化。 2. **数据源集成** JasperReports能够处理多种数据源,包括SQL数据库、JavaBeans、CSV文件、XML数据等。通过...
此外,还可以使用JasperReports自己的内嵌脚本语言JasperReport Scriptlet进行更精细的控制。 5. **图表生成**:JasperReports内置了多种图表类型,如柱状图、饼图、线图等,可以轻松地将数据转换为直观的可视化...