exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath()+\
exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.TRUE);
3.超链接,锚
有时我们想在报表中为某个关键字添加超链接或锚,使鼠标点击该关键字时跳转页面.针对这一小功能,jasperreports 也提供了支持,在ireport中操作很简单.不是所有的元素都支持超链接,目前我所知道支持超链接的常用元素有,动态文本框元素(Text Field),位图元素(Image),图表元素(Chart tool).这三种元素设置超链接的方法都是一样,所以只介绍动态文本框如何设置超链接.
如何在ireport中插入超链接?
由于静态文本框不支持超链接,所以只能通过动态文本框为静态文字设置超链接,操作方法如下所述:
1.在工具栏中选中 Text Field 按钮,回到 Detail 区域,绘制一个Text Field (与绘制矩形方法一样),然后在该Text Field 上点右键,选 Edit Expresion,在弹出的窗口中输入表达式 \然后再点 apply 按钮.(注意: \要包含双引号)
2.打开该 Text Field 的属性框,选 Hyperlink 选项卡,将 Hyperlink target 改为 blank,Hyperlink Type 改为 Reference,在Hyperlink Reference Expression框中输入\http://www.csdn.net\再点关闭.(注意: \http://www.csdn.net\要包含双引号) 此时一个超链接已设置好,导出pdf,html文件看看,点击CSDN即可弹出CSDN的网页.
如何在ireport中插入锚?
其实锚是超链接的一种特殊形式,因此支持超链接的元素都支持锚,不支持超链接的元素都不支持锚,锚的设置也很简单,只要你知道使用html的设置锚,那么ireport也是差不多的.
设置锚,也需要两步操作 1.设置锚对象
在 Title 区域绘制一个动态文本框,输入表达式 “2007年终财务报表”,再打开它的Hyperlink 选项卡,在 Anchor Name Expression 框中输入 “title”,点关闭.此时已定义了一个锚对象.它的锚名字是 title. 2.链接锚对象
在 Detail区域绘制一个动态文本框,输入表达式 “返回顶部”,再打开它的 Hyperlink 选项卡,将Hyperlink target改为 self,Hyperlink Type 改为 LocalAnchor,在Hyperlink Anchor Expression框中输入 “title”,点关闭.
一个锚链接已设置完毕,导出pdf,html看看,当然,如果你的报表内容不多,那么锚起不到任何作用.
4.数据源,自定义数据源
数据源顾名思义数据来源,即报表数据从何而来。jasperreports可以从数据库、XML文件、CSV文件、java.util.Collection对象以及自定义数据源得到数据。在真实项目中,报表数据一般从数据库得到,下面介绍在ireport中如何配制连接制数据库的数据源。操作步骤如下:
说明:本例以MySql数据库来配制数据源
新建一个Document(报表文档),点 Data -> Connections/Data Sources -> New -> Database JDBC Connection -> Next。在弹出的窗口中按照提示填写属性,例: Name:mysql,
JDBC Driver:com.mysql.jdbc.Driver
JDBC URL:jdbc:mysql://localhost:3306/db_name User Name:root
Password:your_password
填好后,单击Test按钮,如弹出 Connection test successful!,则代表数据源配制正确,并再点Save 按钮,保存配制。否则配制错误,请检查哪里出错。 配制好后,即可连接数据库。
那么如何用数据源查询数据库,并将查询结果显示在报表上呢?
说明:本例操作必须配制好数据库数据源才能正常操作。而且连接的数据库里要有表。 点 Data -> Report Query,在弹出的窗口中输入SQL查询语句:select * from t_users 。
如果sql语句正确将在窗口底部显示该表的所有字段,点击OK,即完成了报表查询工作。 大家可以查看一下Fields面板,ireport已经自动将查询出的所有字段,定义成字段对象了(也就是最前面所说的定义字段)。
说完了如何将数据查询出来,接下来的工作就是如何将数据显示在报表界面上。
点View -> Fields打开Fields面板,在面板上任意选一个字段,将它拖到Detail区域的左上角对齐,再选一个字段拖到Detail区域的中上角,好了就用两字段做试验吧,只要Detail区域够宽,大家可以多拖两个字段到Detail区域,拖到Detail区域的字段将在报表中显示。调整好Detail区域的高度,运行(Build -> Execute (whit active connection))一下看看吧,如果你看到有正确数据,那恭喜你,你试验成功了!
自定义数据源
有时,你可能需要自定义一个数据源来满足你的需求,jasperreports对此也提供了良好支持。
只要你实现JRDataSource接口,就行了,很简单吧! JRDataSource接口声明如下: public interface JRDataSource {
public boolean next() throws JRException; public Object getFieldValue(JRField jrField) throws JRException; }
以下我是我自定义的一个数据源代码:
1.先创建一个Bean类,该bean类属性全是大写,这是因为ireport自动定义字段时,字段名全是大写,你也可以手动改为小写,那么该bean类属性就可以为小写,你要确保bean类的属性名与字段名一致(包括大小写)。
package test;
import java.sql.Timestamp;
publicclass Bean { privateintID;
private String NAME; private String NICKNAME; privateintSCORE; privatefloatBALANCE;
private Timestamp LASTLOGINDATE;
publicfloat getBALANCE() { returnBALANCE; }
publicvoid setBALANCE(float balance) { this.BALANCE = balance; }
publicint getID() { returnID; }
publicvoid setID(int id) { this.ID = id; }
public Timestamp getLASTLOGINDATE() { returnLASTLOGINDATE;
}
publicvoid setLASTLOGINDATE(Timestamp lastLoginDate) { this.LASTLOGINDATE = lastLoginDate; }
public String getNAME() { returnNAME; }
publicvoid setNAME(String name) { this.NAME = name; }
public String getNICKNAME() { returnNICKNAME; }
publicvoid setNICKNAME(String nickname) { this.NICKNAME = nickname; }
publicint getSCORE() { returnSCORE; }
publicvoid setSCORE(int score) { this.SCORE = score; } }
2.创建实现数据源类 package test;
import java.sql.Timestamp; import java.util.ArrayList; import java.util.List;