- 浏览: 2445998 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
reference:
http://www.javaworld.com/javaworld/jw-09-2002/jw-0920-opensourceprofile.html
JasperReports是一个非常流行的开源报表工具
所有的报表工具都离不了三个步骤:第一个就是定义报表模板, 第二个就是给模板填充数据, 第三个就是将最终数据的报表输出。
JasperReports的模板文件是一个后缀名为jrxml的xml文件, 它包含这样几个主要元素:
<jasperReport> 根元素
<title>标题
<pageHeader>页头
<detail>具体内容
<pageFooter>页尾
<band>作为以上元素的子元素, 用来定义报表区域
除了jasperReport之外, 其他元素都不是必须的
下面是一个jrxml文件的定义,用来输出helloworld
接下来就是将报表模板文件编译成二进制文件,然后就是给报表模板填充数据,最后是输出(比如输出为PDF文件),下面的代码完成这个工作:
上面的代码是JasperReport的早期版本的写法,不过原理还是一样的。
我们再看一个比较复杂的例子, 它的title是在程序中通过参数传递进行来的, 然后通过JDBC访问数据库来取得要填充的数据:
从上面的模板文件中可以看出, 报表中的parameter, field, variable将通过P${name}, F${name}, and V${name}来进行引用。
下面是对应的java代码:
这里我们有几个类需要了解一下:
JasperDesign:可以看成报表模板对应的对象模型, 我们定义的jrxml文件最终需要转换成该模型来使用, 对于模板对象来说, 它是静态的对象, 因此只需在初始化的时候创建一次,而不必在每次生成报表的时候生成。
JasperReport:经过编译的JasperDesign就是JasperReport
JasperPrint:给JasperReport填充数据和传递参数之后得到的就是JasperPrint对象, 他就是我们最终要生成的报表对象。
JasperManager:可以看成以上的对象的工厂类,它提供有相关的方法来创建以上的类实例
http://www.javaworld.com/javaworld/jw-09-2002/jw-0920-opensourceprofile.html
JasperReports是一个非常流行的开源报表工具
所有的报表工具都离不了三个步骤:第一个就是定义报表模板, 第二个就是给模板填充数据, 第三个就是将最终数据的报表输出。
JasperReports的模板文件是一个后缀名为jrxml的xml文件, 它包含这样几个主要元素:
<jasperReport> 根元素
<title>标题
<pageHeader>页头
<detail>具体内容
<pageFooter>页尾
<band>作为以上元素的子元素, 用来定义报表区域
除了jasperReport之外, 其他元素都不是必须的
下面是一个jrxml文件的定义,用来输出helloworld
<?xml version="1.0"?> <!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <jasperReport name="Simple_Report"> <detail> <band height="20"> <staticText> <reportElement x="180" y="0" width="200" height="20"/> <text><![CDATA[Hello World!]]></text> </staticText> </band> </detail> </jasperReport>
接下来就是将报表模板文件编译成二进制文件,然后就是给报表模板填充数据,最后是输出(比如输出为PDF文件),下面的代码完成这个工作:
public class JasperReportsIntro { public static void main(String[] args) { JasperReport jasperReport; JasperPrint jasperPrint; try { jasperReport = JasperCompileManager.compileReport("reports/jasperreports_demo.jrxml"); jasperPrint = JasperFillManager.fillReport( jasperReport, new HashMap(), new JREmptyDataSource()); JasperExportManager.exportReportToPdfFile( jasperPrint, "reports/simple_report.pdf"); } catch (JRException e) { e.printStackTrace(); } } }
上面的代码是JasperReport的早期版本的写法,不过原理还是一样的。
我们再看一个比较复杂的例子, 它的title是在程序中通过参数传递进行来的, 然后通过JDBC访问数据库来取得要填充的数据:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <jasperReport name="BasicReport" > <parameter name="Title" class="java.lang.String"/> <queryString><![CDATA[select name, cost from product]]></queryString> <field name="NAME" class="java.lang.String"/> <field name="COST" class="java.lang.Double"/> <title> <band height="50"> <textField> <reportElement x="0" y="0" width="200" height="50" /> <textFieldExpression class="java.lang.String">$P{Title}</textFieldExpression> </textField> </band> </title> <pageHeader> <band> </band> </pageHeader> <columnHeader> <band height="20"> <staticText> <reportElement x="180" y="0" width="180" height="20"/> <textElement> <font isUnderline="true"/> </textElement> <text><![CDATA[NAME]]></text> </staticText> <staticText> <reportElement x="360" y="0" width="180" height="20"/> <textElement> <font isUnderline="true"/> </textElement> <text><![CDATA[COST]]></text> </staticText> </band> </columnHeader> <detail> <band height="20"> <textField> <reportElement x="180" y="0" width="180" height="20"/> <textFieldExpression class="java.lang.String"><![CDATA[$F{NAME}]]></textFieldExpression> </textField> <textField pattern="0.00"> <reportElement x="360" y="0" width="180" height="20"/> <textFieldExpression class="java.lang.Double"><![CDATA[$F{COST}]]></textFieldExpression> </textField> </band> </detail> <columnFooter> <band> </band> </columnFooter> <pageFooter> <band height="15"> <staticText> <reportElement x="0" y="0" width="40" height="15"/> <textElement/> <text><![CDATA[Page:]]></text> </staticText> <textField> <reportElement x="40" y="0" width="100" height="15"/> <textElement/> <textFieldExpression class="java.lang.Integer"><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression> </textField> </band> </pageFooter> <summary> <band> </band> </summary> </jasperReport>
从上面的模板文件中可以看出, 报表中的parameter, field, variable将通过P${name}, F${name}, and V${name}来进行引用。
下面是对应的java代码:
// First, load JasperDesign from XML and compile it into JasperReport JasperDesign jasperDesign = JasperManager.loadXmlDesign("BasicReport.xml"); JasperReport jasperReport = JasperManager.compileReport(jasperDesign); // Second, create a map of parameters to pass to the report. Map parameters = new HashMap(); parameters.put("ReportTitle", "Basic JasperReport"); parameters.put("MaxSalary", new Double(25000.00)); // Third, get a database connection Connection conn = Database.getConnection(); // Fourth, create JasperPrint using fillReport() method JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, parameters, conn); // You can use JasperPrint to create PDF JasperManager.printReportToPdfFile(jasperPrint, "BasicReport.pdf"); // Or to view report in the JasperViewer JasperViewer.viewReport(jasperPrint);
这里我们有几个类需要了解一下:
JasperDesign:可以看成报表模板对应的对象模型, 我们定义的jrxml文件最终需要转换成该模型来使用, 对于模板对象来说, 它是静态的对象, 因此只需在初始化的时候创建一次,而不必在每次生成报表的时候生成。
JasperReport:经过编译的JasperDesign就是JasperReport
JasperPrint:给JasperReport填充数据和传递参数之后得到的就是JasperPrint对象, 他就是我们最终要生成的报表对象。
JasperManager:可以看成以上的对象的工厂类,它提供有相关的方法来创建以上的类实例
评论
4 楼
iris_1992
2015-04-30
2005年以前,国外开原报表完全碾压国产软件,但是现在国内软件,像帆软、FineBI,都比较牛掰了,设计模式和数据处理方面优于开源报表,真犯不着再用Jasperreport了,
3 楼
nopain_nogain
2009-05-13
你好,请问你在<queryString/>标签里是怎么使用in的?
如:
<parameter name="loginId" class="java.lang.String"/>
<queryString language="SQL">
<![CDATA[select * from report_log where 1=1 and login_id in($P!{loginId}]]>
</queryString>
parameters.put("loginId", "18187,18185,18182");
在ireport、程序里都不显示报表。
但是使用
select * from report_log where 1=1 and login_id=$P!{loginId}
这样就可以!
谢谢!
如:
<parameter name="loginId" class="java.lang.String"/>
<queryString language="SQL">
<![CDATA[select * from report_log where 1=1 and login_id in($P!{loginId}]]>
</queryString>
parameters.put("loginId", "18187,18185,18182");
在ireport、程序里都不显示报表。
但是使用
select * from report_log where 1=1 and login_id=$P!{loginId}
这样就可以!
谢谢!
2 楼
baopei
2008-10-17
“JasperDesign jasperDesign = JasperManager.loadXmlDesign("BasicReport.xml");“这句提供了实现了后台控制前台的接口,不错,学习了
1 楼
tzq88818453
2008-09-21
你可以回去种田了
发表评论
-
使用Externalization更高效的实现java对象序列化
2012-04-04 22:38 3093Externalization没用过, 它通过牺牲默认序列化的 ... -
关于java的检查异常和非检查异常
2012-04-04 21:31 4916这里有一个关于java的检查异常和非检查异常的观点, 我比较赞 ... -
使用ThreadLocal保证DateFormat线程安全
2012-04-03 06:45 3543大家都知道DateFormat是线程非安全的, 一般在多线程环 ... -
使用枚举实现一个状态机
2012-04-02 23:14 3896非常巧妙的一个使用枚举的例子.原文见这里 interface ... -
一个同步队列例子
2012-04-02 21:35 1535这个用的也比较少, 做一个参考, 原文见这里 private ... -
一个读写锁的例子
2012-04-02 21:20 1507用的比较少, 做一个参考. 原文在这里 public clas ... -
如何计算一个合适的线程池大小参数
2012-04-02 20:57 9028原文在这里 下面是一个计算的框架代码: /** * A ... -
正确使用日志的10个技巧
2012-02-11 21:13 28755做一个苦逼的Java攻城师, 我们除了关心系统的架构这种hig ... -
Java编程最差实践
2012-02-04 17:54 26439原文地址:http://www.odi.ch/prog/des ... -
利用jOOR简化Java 反射使用
2012-01-15 20:39 5093原文:http://lukaseder.wordpress.c ... -
《Java Performance》书评
2012-01-15 18:32 2925原文: http://java.dzone.com/rev ... -
《细说Java》读书笔记
2011-10-05 15:01 1950国人写的, 感觉是一 ... -
《Java开发超级工具集》读书笔记
2011-09-28 08:59 2072"工欲善其事必先利其器", 在平时的开发 ... -
《effective java》 读书笔记
2011-07-02 14:52 7570读第一版已经是好几年前的事儿了, 现在想起来也没什么印象, ... -
用java实现"awk -d"功能(保留多行重复)
2010-06-07 21:48 3025一般用过linux脚本的都知道"awk -d&quo ... -
关于方法返回值的两种处理模式
2010-05-13 09:06 1985目前在处理返回值方面, ... -
JVM调优汇总
2010-02-21 19:18 14380参考网址 http://pengjiaheng.spaces. ... -
log4j的输出转换模式
2009-12-12 10:02 1233转换模式(conversion pattern)为" ... -
java正则表达式用法举例
2009-12-08 11:27 4477java正则表达式真难用啊, 这里整理一个java正则表达式用 ... -
Ibatis TypeHandler使用总结
2009-11-25 19:33 16508ibatis中有一个TypeHandler(准确的说应该是Ty ...
相关推荐
NULL 博文链接:https://zhanghaidang.iteye.com/blog/698328
Jasperreports Jasperreports Jasperreports Jasperreports
jasperreports-6.11.0.jar jasperreports jasperreports
jasperreports,jasperreports,jasperreports,jasperreports,jasperreports,jasperreports,jasperreports,jasperreports,jasperreports
java报表开发的必备神奇,介绍jasperreports和Ireport的作用和操作,非常有用,非常适用与我等 被分配任务却无人教导的屌丝 另附:applet报表打印的文章,不用再搜了 http://gddzmr.iteye.com/blog/192536
commons-beanutils-1.7.0.jar;commons-collections-3.2.1.jar;commons-digester-2.1.jar;commons-logging-1.1.1.jar;itext-asian.jar;itextpdf-5.5.8.jar;jasperreports-6.1.1.jar;...jasperreports-javaflow-6.1.1.jar
jasperreports-6.1.0下载
jasperreports-5.6.0 api
整个大包总共有67M,小弟只能上传20M的东东,所以只传了常用的jasperreports-4.0.1.jar 、jasperreports-applet-4.0.1.jar 、jasperreports-javaflow-4.0.1.jar、jasperreports-fonts-4.0.1.jar 这四个包,总共...
JasperReports 3.6 Development Cookbook
JasperReports is a content-rendering library, not a standalone application. It cannot run on its own and must be embedded in another client- or server-side Java application. JasperReports is a pure ...
jasperreports-4.0.2.jar
jasperreports 教程
jasperreports-6.16.0.jar
jasperreports-6.17.0
jasperreports-6.5.1-project.ta方便学习jasperreport的模块使用,新人比较适用。建议多看看相关书籍
jasperreports-2.0.3.jar
jasperreports-3.5.3.jar jasperreports-3.5.3.jar jasperreports-3.5.3.jar
jasperreports-6.0.4.jar