使用jasperreport和iReport的方法
下载iReport-0.4.0 (图形化界面生成编辑修改报表的结构)
下载iTextAsian.jar (亚洲语言包,如果生成的报表中含有亚洲字符,则需要在classpath中添加该jar)
下载jasperreports-0.6.1-project.zip(包含使用jasperreports的一些例子)
在window下运行iReport/bin/startup.bat启动iReport
常见的问题
1、数据源:通常我们使用JDBC直接连接数据库或Custom DataSource
Custom Datasource是使用用户自定义的数据源来组织数据的方式,可以是excel、csv等文件形式,也可以是一个包含数据的类(以下简称数据类)。
2、在build菜单下选择报表的输出形式,比如PDF preview 就是输出成pdf文件,JRViewer Preview就是在ireport环境下的预览功能。注意在ireport环境下的效果和实际产生的具体文件的显示会有差异。
对包含中文的static text 和field text,在properties里需修改font为某种系统内的中文字体,PDF font name选择STSong_Light,选中PDF Embeded PDF Encoding为UniGB-UCS2-H(Chinese simplified)。并且将iTextAsian.jar加入到ireport的lib文件夹下,这样通过ireport产生的pdf文件就支持中文了。
3、在应用系统中产生的pdf文件不是通过ireport产生的,ireport只是用于编辑及预览报表形式,它产生*.jrxml文件,编译后产生*.jasper文件。通过在程序中调用JasperRunManager.runReportToPdfFile(String arg,Map param,JRDatasource datasource)方法,该方法的三个参数分别表示代表报表形式的.jasper文件位置arg,从外部传入的参数集合param,和数据类。
4、$P{param_name}代表参数,{}内是参数的名称,在报表中设定后,在运行的时候通过从外部传入的参数来动态生成标题等数据,并且可以作为查询条件传入sql语句使用(如果是使用JDBC直接连接数据库的话)
$V{PAGE_NUMBER}代表当前页数,$V代表variable,对现有的group,$V{groupname_COUNT}代表当前组的记录数
$F{Field_name}表示字段,是报表中最重要的部分。如果JDBC方式的连接,输入sql查询语句就可得到所有查询所得到的字段;如果是Custom Datasource方式,新建一字段,例如user_id。数据类中getFieldValue(JRField field),field就是报表中的$F{Field_name}。程序中根据JRField对象的name属性来确定返回哪个值
if("user_id".equals(field.getName()))return data[index][3]; //代表返回当前行的第四个字段
5、如果出现evaluation time错误,只要从properties>text Field>Evaluation time再选择一次now即可
6、关于数据类。数据类要实现了JRDataSource的接口,next和getFieldValue方法。next的功能相当于记录下移一行,getFieldValue的功能就是从jasper里面得到一个Field对象,然后通过字符串的比较来获得对应数据填充。
如果要在ireport里看到效果,必须有取得这个数据类的方法,通常的做法是构造XXXDataSourceFactory类,提供返回数据类的方法。该类在实际的应用程序中并不需要
例如: getTheDatasource(){return new XXXDatasource();}
7、打印当前时间的方法。增加一个filed,text expression为new SimpleDateFormat("yyyy.MM.dd").format(new Date())
8、注意要勾选当数值为空时显示为空白
本文地址:http://www.45fan.com/a/question/71117.html