ireport制作jasperreport报表详细过程(包括jsp端代码实现)
来源:互联网 发布:中国互联网主干网络 编辑:程序博客网 时间:2024/06/06 17:24
概述:
现在简要的介绍Jasperreport 是
如何工作的,这样你可以更好的理解iReport 是如何帮助Jasperreport 实现前端的
工作,其实这些工作在我们看来就是“脏活”,为什么呢?看看下面的资料就知
道了:
首先是要有一个XML
文件(一般是以jrxml后缀),那么这个XML文件从那里来呢?做什么用呢? 这
个XML 文件就是报表的定义文件,整个报表的每一个细节都在这个XML 文件
之中定义,一个简单报表的xml文件就有几百行,你可以手工编辑这个XML文
件(一行一行,一段一段的编辑吧――这就是所谓的“脏活”),然后可以在jsp后台使用JasperCompileManager将xml文件编译为jasper文件
ireport工具就是简化编写xml文件和编译的这个流程,而且提供可视化编辑窗口,非常方便
ireport部分:
我使用的是ireport3.0和现在最新的4.0界面上有很大的不同:
3.0界面:
这里,我假设ireport的环境已经配置完毕,点击左上角的档案,选择开启新档,设置报表初始化参数:
注意一下里边的字段数的按钮,字段数设置默认为1,如果设置为2的话,就相当于每一列会有2个字段排列,这样讲有点抽象,请看下边
的例子:
假设我们的数据表是这样:
namesexrealnameremarka_1b_1c_1d_1a_2b_2c_2d_2a_3b_3c_3d_3a_4b_4c_4d_4如果ireport的字段数设为2,结果会变成:
namesexrealnameremarka_1 a_2b_1 b_2c_1 c_2d_1 d_2a_3 a_4b_3 b_4c_3 c_4d_3 d_4所以,一般设置字段数为1即可。
新建后,可以看到中间的控制面板:
这里,假设您只需要报表显示表格和统计数据,所以title和lastpagefooter可以不要,在左上角的预览里,选择栏,把title和lastpagefooter高度设为0.
下面开始设计报表:
然后可以拖拉到控制面板对应字段对齐
这里假设各位都会对其,效果图如下:
使用报表变量,计算统计值:
document下右键添加variable,出现这个界面,然后按照这样设置:
这里我是统计列a的个行相加值,因为前面 已经设置了sum,所以,报表会自动计算列a的相加值。
这里设计报表要注意几点:
1.字段间要对齐,方框为红色的,表明是超出报表边界
2.写表达式的时候,与java类型兼容,但是写法有点不同,类型转换要用new 类型 不然会报错
jsp处理报表部分
设置report环境:
1.每个Web应用都会有WEB-INF目录,但是lib 是不一定有的,如果没有就创
建它,本文需要的jar库文件有3个:
jasperreports-0.5.3.jar :jasperreports执行时需要的API
iTextAsian.jar :亚洲字符集支持
itext-1.02b.jar :其他字符集支持
2.在Web应用中根目录下创建repotrs目录,其实这是一种建议,没有必要完
全按照这样做,你可以根据你的业务需要创建N个目录或是层次目录。
把.jasper文件拷贝到repotrs目录下,比如例子中的BusinessRpt.jasper
文件。
jsp两种模式:
1.直接使用jsp处理报表
2.使用servlet处理报表
1.使用jsp处理报表:
jsp文件:
01
<%@ page session=
"false"
%>
02
<%@ page
import
=
"dori.jasper.engine.*"
%>
03
<%@ page
import
=
"javax.naming.*"
%>
04
<%@ page
import
=
"java.sql.*"
%>
05
<%@ page
import
=
"javax.sql.*"
%>
06
<%@ page
import
=
"java.util.*"
%>
07
<%@ page
import
=
"java.io.*"
%>
08
<html>
09
<head>
10
<meta http-equiv=
"Content-Type"
content=
"text/html; charset=gb2312"
>
11
<title></title>
12
<%
13
DataSource ds =
null
;
14
try
{
15
InitialContext ctx=
new
InitialContext();
16
ds=(DataSource)ctx.lookup(
"java:comp/env/jdbc/mysql"
);
17
Connection conn = ds.getConnection();
18
//装载jasper 文件
19
File business_rpt =
new
20
File(application.getRealPath(
"/reports/BusinessRpt.jasper"
));
21
// http://blog.csdn.net/jemlee2002/archive/2004/10/08/JJem3.aspx
22
//ProjectName 就是iReport 的变量$P{ProjectName}的名称,
23
//proname 就是从界面上获取的值。
24
Map parameters =
new
HashMap();
25
parameters.put(
"ProjectName "
, proname);
26
// JasperRunManager是一个输出控制管理类,下文会提及部分内容
27
JasperRunManager.runReportToHtmlFile(business_rpt.getPath(),parameters,conn);
28
//如果创建报表成功,则转向该报表,其实可以把报表套在框架内,这样实现比较有意
29
义的报表格式。
30
response.sendRedirect(
"/reports/BusinessRpt.html"
);
31
}
catch
(Exception ex){
32
out.print(
"出现例外,信息是:"
+ex.getMessage());
33
ex.printStackTrace();
34
}
35
%>
36
</head>
37
<body>
38
</body>
39
</html>
2.使用servlet处理报表:
主要区别就是,servlet是直接输出report报表流:
先写一个CustomDataSource类实现report的JRDataSource接口,转化vector向量为数据源:
01
public
class
CustomDataSource
implements
JRDataSource
02
{
03
private
Vector dataVector =
new
Vector();
04
private
int
index = -
1
;
05
06
public
CustomDataSource(Vector DataVector)
07
{
08
dataVector=DataVector;
09
}
10
11
public
boolean
next()
throws
JRException
12
{
13
index++;
14
return
(index < dataVector.size());
15
}
16
17
public
Object getFieldValue(JRField field)
throws
JRException
18
{
19
Object value =
null
;
20
String fieldName = field.getName();
21
22
value=((Map)dataVector.get(index)).get(fieldName);
23
return
value;
24
}
25
26
27
}
输出html:
01
ServletContext context =
this
.getServletConfig().getServletContext();
02
File reportFile =
new
File(context
03
.getRealPath(
"/reports/test.jasper"
));
//加载报表路径
04
if
(!reportFile.exists()) {
05
response.setContentType(CONTENT_TYPE);
06
PrintWriter out = response.getWriter();
07
out.print(
"<script language='javascript'>"
);
08
out.print(
"alert('找不到报表!');"
);
09
out.print(
"</script>"
);
10
return
;
11
}
12
13
Map parameters =
new
HashMap();
14
15
16
17
response.setContentType(CONTENT_TYPE);
18
PrintWriter out = response.getWriter();
19
try
{
20
21
JasperReport jasperReport = (JasperReport) JRLoader
22
.loadObject(reportFile.getPath());
//加载报表
23
24
/*
25
java.lang.reflect.Field pageHeight = JRBaseReport.class.getDeclaredField("pageHeight");
26
pageHeight.setAccessible(true);
27
pageHeight.setInt(jasperReport, 500);
28
*/
29
30
31
JasperPrint jasperPrint = JasperFillManager
32
.fillReport(jasperReport, parameters,
33
new
CustomDataSource((Vector) re
34
.get(
1
)));
//加载数据源和parameters,这里的数据源用到的是JRDataSource,所以要实现JRDataSource接口
35
36
JRHtmlExporter exporter =
new
JRHtmlExporter();
37
38
Map imagesMap =
new
HashMap();
39
request.getSession().setAttribute(
"IMAGES_MAP"
,
40
imagesMap);
41
42
String header =
""
;
43
header =
"<script language='javascript'>\n"
;
44
header +=
"window.history.forward(1);\n"
;
45
header +=
"document.onkeydown=function(){if(event.keyCode==8){if((document.activeElement.type!='text')&&(document.activeElement.type!='textarea')){event.keyCode=0}};}\n"
;
46
header +=
"document.oncontextmenu=function() {return false;};\n"
;
47
header +=
"</script>\n"
;
48
49
header +=
"<html>\n"
;
50
header +=
"<head>\n"
;
51
header +=
" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=GBK\">\n"
;
52
header +=
"<style type=\"text/css\">\n"
;
53
header +=
" a {text-decoration: none}\n"
;
54
header +=
" </style>\n"
;
55
header +=
"</head>\n"
;
56
header +=
"<body text=\"#000000\" link=\"#000000\" alink=\"#000000\" vlink=\"#000000\">\n"
;
57
header +=
"<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n"
;
58
header +=
"<tr><td width=\"50%\"> </td><td align=\"center\">\n"
;
59
header +=
"\n"
;
60
61
exporter.setParameter(
62
JRExporterParameter.JASPER_PRINT,
63
jasperPrint);
64
exporter.setParameter(
65
JRExporterParameter.OUTPUT_WRITER, out);
66
exporter.setParameter(
67
JRHtmlExporterParameter.IMAGES_MAP,
68
imagesMap);
69
exporter.setParameter(
70
JRHtmlExporterParameter.IMAGES_URI,
71
"/Images/"
);
72
exporter
73
.setParameter(
74
JRHtmlExporterParameter.HTML_HEADER,
75
header);
76
77
exporter.exportReport();
1
pdf输出:
01
byte
[] bytes =
null
;
02
03
try
{
04
bytes = JasperRunManager.runReportToPdf(reportFile
05
.getPath(), parameters,
06
new
CustomDataSource((Vector) re.get(
1
)));
07
if
(bytes !=
null
&& bytes.length >
0
) {
08
response.setContentType(
"application/pdf"
);
09
response.setContentLength(bytes.length);
10
ServletOutputStream ouputStream = response
11
.getOutputStream();
12
ouputStream.write(bytes,
0
, bytes.length);
13
ouputStream.flush();
14
ouputStream.close();
15
}
16
17
}
catch
(Exception e) {
18
e.printStackTrace();
19
System.out.println(
"ErrorTime:"
+
new
Date());
20
response.setContentType(CONTENT_TYPE);
21
PrintWriter out = response.getWriter();
22
out.print(
"<script language='javascript'>"
);
23
out.print(
"alert('"
24
+ e.toString().replace(
"'"
,
" "
) +
"');"
);
25
out.print(
"</script>"
);
26
27
}
1
excel输出:
01
try
{
02
03
JasperReport jasperReport = (JasperReport) JRLoader
04
.loadObject(reportFile.getPath());
05
06
07
ServletOutputStream ouputStream = response
08
.getOutputStream();
09
10
JasperPrint jasperPrint = JasperFillManager
11
.fillReport(jasperReport, parameters,
12
new
CustomDataSource((Vector) re
13
.get(
1
)));
14
15
response.setContentType(
"application/ms-excel"
);
16
response.setHeader(
"Content-Disposition"
,
17
"inline;filename=\""
18
+ jasperPrint.getName() +
".XLS\""
);
19
20
JRXlsExporter exporter =
new
JRXlsExporter();
21
22
exporter.setParameter(
23
JRExporterParameter.JASPER_PRINT,
24
jasperPrint);
25
exporter.setParameter(
26
JRExporterParameter.OUTPUT_STREAM,
27
ouputStream);
28
exporter
29
.setParameter(
30
JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
31
Boolean.TRUE);
32
exporter
33
.setParameter(
34
JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
35
Boolean.FALSE);
36
exporter
37
.setParameter(
38
JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,
39
Boolean.FALSE);
40
exporter.exportReport();
41
42
}
43
44
catch
(Exception e) {
45
e.printStackTrace();
46
System.out.println(
"ErrorTime:"
+
new
Date());
47
48
response.setContentType(CONTENT_TYPE);
49
PrintWriter out = response.getWriter();
50
out.print(
"<script language='javascript'>"
);
51
out.print(
"alert('"
52
+ e.toString().replace(
"'"
,
" "
) +
"');"
);
53
out.print(
"</script>"
);
54
55
}
- ireport制作jasperreport报表详细过程(包括jsp端代码实现)
- ireport制作jasperreport报表详细过程(包括jsp端代码实现)
- ireport制作jasperreport报表详细过程(包括jsp端代码实现)
- ireport制作jasperreport报表详细过程
- Jasperreport+iReport制作报表
- ireport+jasperreport开源报表中使用javabean作为数据源的详细实现过程
- 使用ireport制作报表的详细过程
- Ireport+Jasperreport实现报表使用
- 使用JasperReport和iReport制作java报表
- 使用JasperReport和iReport制作java报表
- 使用JasperReport和iReport制作java报表
- JasperReport+iReport+Applet+Servlet制作报表
- IReport+jasperReport制作报表并打印
- JasperReport + iReport 实现Java报表套打
- 第一部分:使用iReport制作报表的详细过程(Windows环境下)
- 使用iReport制作报表的详细过程(Windows环境下)
- 第一部分:使用iReport制作报表的详细过程(Windows环境下)
- 使用iReport制作报表的详细过程(Windows环境下)
- hibernate 值类型的set、bag、list和map (非实体bean类型的)
- 现代图像处理与分析--国内公司&就业
- Intermediate Perl 1 Chapter 2. Intermediate Foundations 2.1. List Operators List
- 解决办法:服务器未能识别 HTTP 标头 SOAPAction 的值
- 在visual studio中自定义顺序执行测试用例
- ireport制作jasperreport报表详细过程(包括jsp端代码实现)
- One reason not to chose VOS
- ireport的使用
- Andrid自定义组件之垂直SeekBar以及播放帧动画
- c/c++
- 一篇获益的[转载]-工作的态度
- 使用iText操作pdf文件
- iReport 和 Jasperreport整合开发web报表向导
- 堆-实现优先级队列算法