ireport制作jasperreport报表详细过程.docx
《ireport制作jasperreport报表详细过程.docx》由会员分享,可在线阅读,更多相关《ireport制作jasperreport报表详细过程.docx(17页珍藏版)》请在冰点文库上搜索。
ireport制作jasperreport报表详细过程
ireport制作jasperreport报表详细过程(包括jsp端代码实现)
概述:
现在简要的介绍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个字段排列,这样讲有点抽象,请看下边的例子:
假设我们的数据表是这样:
name
sex
realname
remark
a_1
b_1
c_1
d_1
a_2
b_2
c_2
d_2
a_3
b_3
c_3
d_3
a_4
b_4
c_4
d_4
如果ireport的字段数设为2,结果会变成:
name
sex
realname
remark
a_1a_2
b_1b_2
c_1c_2
d_1d_2
a_3a_4
b_3b_4
c_3c_4
d_3d_4
所以,一般设置字段数为1即可。
新建后,可以看到中间的控制面板:
这里,假设您只需要报表显示表格和统计数据,所以title和lastpagefooter可以不要,在左上角的预览里,选择栏,把title和lastpagefooter高度设为0.
下面开始设计报表:
然后可以拖拉到控制面板对应字段对齐
这里假设各位都会对其,效果图如下:
使用报表变量,计算统计值:
document下右键添加variable,出现这个界面,然后按照这样设置:
这里我是统计列a的个行相加值,因为前面image已经设置了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文件:
viewsourceprint?
01<%@pagesession="false"%>
02<%@pageimport="dori.jasper.engine.*"%>
03<%@pageimport="javax.naming.*"%>
04<%@pageimport="java.sql.*"%>
05<%@pageimport="javax.sql.*"%>
06<%@pageimport="java.util.*"%>
07<%@pageimport="java.io.*"%>
08
09
10
11
12<%
13DataSourceds=null;
14try{
15InitialContextctx=newInitialContext();
16ds=(DataSource)ctx.lookup("java:
comp/env/jdbc/mysql");
17Connectionconn=ds.getConnection();
18//装载jasper文件
19Filebusiness_rpt=new
20File(application.getRealPath("/reports/BusinessRpt.jasper"));
21//
22//ProjectName就是iReport的变量$P{ProjectName}的名称,
23//proname就是从界面上获取的值。
24Mapparameters=newHashMap();
25parameters.put("ProjectName",proname);
26//JasperRunManager是一个输出控制管理类,下文会提及部分内容
27JasperRunManager.runReportToHtmlFile(business_rpt.getPath(),parameters,conn);
28//如果创建报表成功,则转向该报表,其实可以把报表套在框架内,这样实现比较有意
29义的报表格式。
30response.sendRedirect("/reports/BusinessRpt.html");
31}catch(Exceptionex){
32out.print("出现例外,信息是:
"+ex.getMessage());
33ex.printStackTrace();
34}
35%>
36
37
38
39
2.使用servlet处理报表:
主要区别就是,servlet是直接输出report报表流:
先写一个CustomDataSource类实现report的JRDataSource接口,转化vector向量为数据源:
viewsourceprint?
01publicclassCustomDataSourceimplementsJRDataSource
02{
03privateVectordataVector=newVector();
04privateintindex=-1;
05
06publicCustomDataSource(VectorDataVector)
07{
08dataVector=DataVector;
09}
10
11publicbooleannext()throwsJRException
12{
13index++;
14return(index15}
16
17publicObjectgetFieldValue(JRFieldfield)throwsJRException
18{
19Objectvalue=null;
20StringfieldName=field.getName();
21
22value=((Map)dataVector.get(index)).get(fieldName);
23returnvalue;
24}
25
26
27}
输出html:
viewsourceprint?
01ServletContextcontext=this.getServletConfig().getServletContext();
02FilereportFile=newFile(context
03.getRealPath("/reports/test.jasper"));//加载报表路径
04if(!
reportFile.exists()){
05response.setContentType(CONTENT_TYPE);
06PrintWriterout=response.getWriter();
07out.print("");
08out.print("alert('找不到报表!
');");
09out.print("");
10return;
11}
12
13Mapparameters=newHashMap();
14
15
16
17response.setContentType(CONTENT_TYPE);
18PrintWriterout=response.getWriter();
19try{
20
21JasperReportjasperReport=(JasperReport)JRLoader
22.loadObject(reportFile.getPath());//加载报表
23
24/*
25java.lang.reflect.FieldpageHeight=JRBaseReport.class.getDeclaredField("pageHeight");
26pageHeight.setAccessible(true);
27pageHeight.setInt(jasperReport,500);
28*/
29
30
31JasperPrintjasperPrint=JasperFillManager
32.fillReport(jasperReport,parameters,
33newCustomDataSource((Vector)re
34.get
(1)));//加载数据源和parameters,这里的数据源用到的是JRDataSource,所以要实现JRDataSource接口
35
36JRHtmlExporterexporter=newJRHtmlExporter();
37
38MapimagesMap=newHashMap();
39request.getSession().setAttribute("IMAGES_MAP",
40imagesMap);
41
42Stringheader="";
43header="/n";
44header+="window.history.forward
(1);/n";
45header+="document.onkeydown=function(){if(event.keyCode==8){if((document.activeElement.type!
='text')&&(document.activeElement.type!
='textarea')){event.keyCode=0}};}/n";
46header+="document.oncontextmenu=function(){returnfalse;};/n";
47header+="/n";
48
49header+="/n";
50header+="
/n";
51header+="/n";
52header+="/n";
53header+="a{text-decoration:
none}/n";
54header+="/n";
55header+="/n";
56header+="/n";
57header+="/n";
58header+="
/n";59header+="/n";
60
61exporter.setParameter(
62JRExporterParameter.JASPER_PRINT,
63jasperPrint);
64exporter.setParameter(
65JRExporterParameter.OUTPUT_WRITER,out);
66exporter.setParameter(
67JRHtmlExporterParameter.IMAGES_MAP,
68imagesMap);
69exporter.setParameter(
70JRHtmlExporterParameter.IMAGES_URI,
71"/Images/");
72exporter
73.setParameter(
74JRHtmlExporterParameter.HTML_HEADER,
75header);
76
77exporter.exportReport();
viewsourceprint?
1pdf输出:
viewsourceprint?
01byte[]bytes=null;
02
03try{
04bytes=JasperRunManager.runReportToPdf(reportFile
05.getPath(),parameters,
06newCustomDataSource((Vector)re.get
(1)));
07if(bytes!
=null&&bytes.length>0){
08response.setContentType("application/pdf");
09response.setContentLength(bytes.length);
10ServletOutputStreamouputStream=response
11.getOutputStream();
12ouputStream.write(bytes,0,bytes.length);
13ouputStream.flush();
14ouputStream.close();
15}
16
17}catch(Exceptione){
18e.printStackTrace();
19System.out.println("ErrorTime:
"+newDate());
20response.setContentType(CONTENT_TYPE);
21PrintWriterout=response.getWriter();
22out.print("");
23out.print("alert('"
24+e.toString().replace("'","")+"');");
25out.print("");
26
27}
viewsourceprint?
1excel输出:
viewsourceprint?
01try{
02
03JasperReportjasperReport=(JasperReport)JRLoader
04.loadObject(reportFile.getPath());
05
06
07ServletOutputStreamouputStream=response
08.getOutputStream();
09
10JasperPrintjasperPrint=JasperFillManager
11.fillReport(jasperReport,parameters,
12newCustomDataSource((Vector)re
13.get
(1)));
14
15response.setContentType("application/ms-excel");
16response.setHeader("Content-Disposition",
17"inline;filename=/""
18+jasperPrint.getName()+".XLS/"");
19
20JRXlsExporterexporter=newJRXlsExporter();
21
22exporter.setParameter(
23JRExporterParameter.JASPER_PRINT,
24jasperPrint);
25exporter.setParameter(
26JRExporterParameter.OUTPUT_STREAM,
27ouputStream);
28exporter
29.setParameter(
30JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
31Boolean.TRUE);
32exporter
33.setParameter(
34JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
35Boolean.FALSE);
36exporter
37.setParameter(
38JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,
39Boolean.FALSE);
40exporter.exportReport();
41
42}
43
44catch(Exceptione){
45e.printStackTrace();
46System.out.println("ErrorTime:
"+newDate());
47
48response.setContentType(CONTENT_TYPE);
49PrintWriterout=response.getWriter();
50out.print("");
51out.print("alert('"
52+e.toString().replace("'","")+"');");
53out.print("");
54
55
展开阅读全文
相关搜索
资源标签