一、报表样式设计
1、使用ireport Design进行报表可视化设计[下载地址:http://community.jaspersoft.com/project/ireport-designer]
2、打开ireport Design并新建一个blank A4的模板,如下所示,默认定义了页面的不同结构
3、我的目标报表需要有报告的title和一些统计的表格数据,而表格title我希望参数如,所以我在Parameters节点下添加了一个title的参数,然后将改参数拖动到右侧窗口“Title”区域上,调整参数框的位置和大小。
另外我还希望显示一个执行时间,所以打开组件面板,将“Current Date”的组件也拖动到右侧窗口的Title区域。
4、报表内容部分我希望填充一些统计的表格数据,首先需要设置列头,因为这个列头是不变的,所以我们打开组件面板,拖动几个“static text”组件到“column header”区域,并进行排版。
表格内容我们从java代码中传入,所以需要定义几个参数,我们在“Fields”下新建几个Field并进行重命名。将建好的field参数拖到右侧窗口的“Detail 1”区域并进行排版。
因为有时候数据会出现因为过长而被截断的现象,所以我们需要再对Details下的field属性进行设置,选择某一个field,然后将“Stretch with overflow”勾选,将该区域内其他的所有field的“stretch type”全部修改为“relative to band height”。
5、将xml compile为jasper格式,最终整体样式如下:
二、jasper使用报表模板文件并生成最终报表
1、引入jasper的依赖
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>
6.0
.
0
</version>
</dependency>
|
2、根据jasper报表的Field设计,新建一个java类,并且设置与之名字一样的成员,生成所有这些成员对应的set和get方法。
public
class
CrashBean {
private
String hash;
private
String number_o;
private
String user_o;
private
String number_l;
private
String user_l;
private
String imei;
private
String product;
private
String rom;
private
String version;
private
String call;
private
String stack;
private
String path;
public
CrashBean() {
super
();
}
public
CrashBean(String hash, String number_o, String user_o,
String number_l, String user_l, String imei, String product,
String rom, String version, String call, String stack, String path) {
super
();
this
.hash = hash;
this
.number_o = number_o;
this
.user_o = user_o;
this
.number_l = number_l;
this
.user_l = user_l;
this
.imei = imei;
this
.product = product;
this
.rom = rom;
this
.version = version;
this
.call = call;
this
.stack = stack;
this
.path = path;
}
public
String getProduct() {
return
product;
}
public
void
setProduct(String product) {
this
.product = product;
}
public
String getRom() {
return
rom;
}
public
void
setRom(String rom) {
this
.rom = rom;
}
public
String getVersion() {
return
version;
}
public
void
setVersion(String version) {
this
.version = version;
}
public
String getCall() {
return
call;
}
public
void
setCall(String call) {
this
.call = call;
}
public
String getStack() {
return
stack;
}
public
void
setStack(String stack) {
this
.stack = stack;
}
public
String getPath() {
return
path;
}
public
void
setPath(String path) {
this
.path = path;
}
public
String getHash() {
return
hash;
}
public
void
setHash(String hash) {
this
.hash = hash;
}
public
String getNumber_o() {
return
number_o;
}
public
void
setNumber_o(String number_o) {
this
.number_o = number_o;
}
public
String getUser_o() {
return
user_o;
}
public
void
setUser_o(String user_o) {
this
.user_o = user_o;
}
public
String getNumber_l() {
return
number_l;
}
public
void
setNumber_l(String number_l) {
this
.number_l = number_l;
}
public
String getUser_l() {
return
user_l;
}
public
void
setUser_l(String user_l) {
this
.user_l = user_l;
}
public
String getImei() {
return
imei;
}
public
void
setImei(String imei) {
this
.imei = imei;
}
}
|
3、使用JasperReport提供的方法设置报表参数和数据
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.Map;
import
org.slf4j.Logger;
import
org.slf4j.LoggerFactory;
import
net.sf.jasperreports.engine.JRDataSource;
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.data.JRBeanCollectionDataSource;
import
net.sf.jasperreports.engine.util.JRLoader;
public
class
MyJasperReport {
private
Logger m_logger = LoggerFactory.getLogger(
this
.getClass());
private
ArrayList<CrashBean> crashBeans =
new
ArrayList<CrashBean>();
public
MyJasperReport(String jasperFile, String htmlReport,ArrayList<CrashBean> beans) {
// generatorBeanData();
Map parameters =
new
HashMap();
parameters.put(
"reporttitle"
,
"这是一个测试用的Title"
);
// 定义java bean数据源
JRDataSource dataSource =
new
JRBeanCollectionDataSource(beans);
try
{
JasperReport jasperReport = (JasperReport) JRLoader
.loadObjectFromFile(jasperFile);
JasperPrint print = JasperFillManager.fillReport(jasperReport,
parameters, dataSource);
JasperExportManager.exportReportToHtmlFile(print, htmlReport);
}
catch
(Exception ex) {
m_logger.error(ex.getMessage());
ex.printStackTrace();
}
}
public
void
generatorBeanData()
{
}
}
|
备注:报表除了html,还支持pdf、csv等多种格式