??xml version="1.0" encoding="utf-8" standalone="yes"?>
关于iReport和JasperReport的简明手?/p>
By Gem 伍子?/p>
JasperReport的开发环境必要导入以下所有包Q?/p> 1Q?JasperReport包,?font size="+0">jasperreports-0.6.1.jarQ?/p> 2Q?Aparche Common包,包括logging?font size="+0">digester?font size="+0">beanutils?font size="+0">collections?font size="+0">logging-apiQ?/p> 3Q?iText包,包括itext-1.1.jar?font size="+0">iTextAsian.jarQ用于输Z文字W到PDF文gQ?/p> 以上所有包Q除?font size="+0">iTextAsian.jarQ都已经包含?font size="+0">iReport\lib目录下?/p> ?font size="+0">iReport jrxml文g通过Jasper~译之后变成了jasper文gQ这份文件才是真正在E序中调用生成报表的report文g?/p> 但是有一点要注意的是Q?font size="+0">jasper的各个版本编译出来的jasper文gq不兼容Q就是说?font size="+0">0.6.1版编译出来的文g?font size="+0">0.6.4版调用是会出错的Q?font size="+0">iReport自带?font size="+0">Jasper版本?font size="+0">0.6.1Q?font size="+0">jasper的最新版本是0.6.4。所以ؓ了保持通用性,我徏议只?font size="+0">iReport来开发编?font size="+0">jrxml文gQ而不~译?font size="+0">jasper文gQ在我们的打印报表程序中再即时编译一ơ。虽然这h率可能会低了一点,但是保证了不同版本的兼容性?/p> 在我们的E序中,要调?font size="+0">Jasper的话Q首先要得到一个数据库?font size="+0">ConnectionQŞ如:Connection con = ... 需要往JasperReport传参数的话只需要新Z?font size="+0">MapQ以参数名作?font size="+0">keyQ需要传入的对象作ؓvalueQ譬如: Map props = new HashMap(); props.put("name", new String("name")); 需要多个参数只需分别putq?font size="+0">Map里去可以了?/p> JasperReport有如下几个主要的ManagerQ?/p> ?font size="+0">jrxml文g~译?font size="+0">jasper文g?font size="+0">JasperReport对象 从数据源中获取数据ƈ填充jasper文g?font size="+0">JasperReport对象Q?font size="+0">JasperPrint对象 ?font size="+0">JasperPrint对象直接输出到打印机打印 ?font size="+0">JasperPrint对象导出?font size="+0">PDF?font size="+0">HTML文gQ或) q行一?font size="+0">jasper文g?font size="+0">JasperReport对象q输出到PDF?font size="+0">Html文gQ或)中,我的理解是等于集成了JasperFillManager?strong>JasperExportManager的功?/p> 对于上述对象的详l说明请参阅JasperReport的文?/p> 例程Q?/p>例程Q?
public static void main(String[] args) { try { Class.forName("org.gjt.mm.mysql.Driver"); Connection con = DriverManager.getConnection( "jdbc:mysql://wes:3306/umpdb?useUnicode=true&characterEncoding=GBK", "root", "elite"); File f1 = new File("Account.jrxml"); File f2 = new File("Contact.jrxml"); JasperReport main = JasperCompileManager.compileReport(f1 .getAbsolutePath()); JasperReport report = JasperCompileManager.compileReport(f2 .getAbsolutePath()); Map props = new HashMap(); props.put("subreport", report); JasperPrint print = JasperFillManager.fillReport(main, props,con); //JasperPrintManager.printReport(print,true); JasperExportManager.exportReportToPdfFile(print, "a.pdf"); //JasperRunManager.runReportToPdfFile("Account.jasper", "a.pdf", props, con); } catch (ClassNotFoundException e) { // TODO 自动生成 catch ?/p> e.printStackTrace(); } catch (SQLException e) { // TODO 自动生成 catch ?/p> e.printStackTrace(); } catch (JRException e) { // TODO 自动生成 catch ?/p> e.printStackTrace(); } } 1Q?font size="+0">iReport 2Q?font size="+0">iReport 3Q用Report SQL查询之后Q可能会出现某些字段没有自动建立FieldQ就需要在Field中手动定义了?/p>
package
com.eesys.apps.logic;
2
3
import
java.io.File;
4
import
java.io.FileInputStream;
5
import
java.io.InputStream;
6
7
import
jxl.Cell;
8
import
jxl.CellType;
9
import
jxl.Sheet;
10
import
jxl.Workbook;
11
import
jxl.write.Label;
12
13
public
class
PrintManager
{
14
15
public
static
void
main(String[] args)
{
16
jxl.Workbook rwb
=
null
;
17
try
{
18
//
构徏Workbook对象, 只读Workbook对象
19
//
直接从本地文件创建Workbook
20
//
从输入流创徏Workbook
21
System.out.println(
"
********START!*******
"
);
22
InputStream is
=
new
FileInputStream(
"
D:/test.xls
"
);
23
rwb
=
Workbook.getWorkbook(is);
24
25
//
Sheet(术语Q工作表)是Excel表格左下角的Sheet1,Sheet2,Sheet3但在E序?br />
26
//
Sheet的下标是?开?br />
27
//
获取W一张Sheet?/span>
28
Sheet rs
=
rwb.getSheet(
0
);
29
//
获取Sheet表中所包含的d?/span>
30
int
rsColumns
=
rs.getColumns();
31
//
获取Sheet表中所包含的总行?/span>
32
int
rsRows
=
rs.getRows();
33
//
获取指定单元格的对象引用
34
for
(
int
i
=
0
;i
<
rsRows;i
++
)
{
35
for
(
int
j
=
0
;j
<
rsColumns;j
++
)
{
36
Cell cell
=
rs.getCell(j,i);
37
System.out.print(cell.getContents()
+
"
"
);
38
}
39
System.out.println();
40
}
41
//
利用已经创徏的Excel工作薄创建新的可写入的Excel工作?/span>
42
jxl.write.WritableWorkbook wwb
=
Workbook.createWorkbook(
new
File(
"
D:/Book2.xls
"
),rwb);
43
//
dW一张工作表
44
45
jxl.write.WritableSheet ws
=
wwb.getSheet(
0
);
46
47
48
//
获得W一个单元格对象
49
jxl.write.WritableCell wc
=
ws.getWritableCell(
0
,
0
);
50
//
判断单元格的cd, 做出相应的{?/span>
51
if
(wc.getType()
==
CellType.LABEL)
{
52
Label l
=
(Label) wc;
53
l.setString(
"
The value has been modified.
"
);
54
}
55
//
写入Excel对象
56
wwb.write();
57
wwb.close();
58
System.out.println(
"
********END!*******
"
);
59
60
}
catch
(Exception e)
{
61
e.printStackTrace();
62
}
63
finally
{
64
//
操作完成Ӟ关闭对象Q释攑֍用的内存I间
65
rwb.close();
66
67
}
68
}
69
}
70
JSP 文g<%@ page contentType="text/html; charset=GBK" %>
2<%@ page import="java.io.File" %>
3<%@ page import="java.io.FileInputStream" %>
4<%@ page import="java.io.FileOutputStream" %>
5<%@ page import="jxl.write.WritableSheet" %>
6<%@ page import="java.io.InputStream" %>
7
8<%
9response.reset();//清除Buffer
10response.setContentType("application/vnd.ms-excel");
11File fileWrite = new File("d:/test.xls");
12response.setContentLength((int) fileWrite.length());
13InputStream in=new FileInputStream(fileWrite);
14byte[] b = new byte[2048];
15int len = 0;
16while ((len = in.read(b)) > 0)
{
17 response.getOutputStream().write(b, 0, len); // 向浏览器输出
18 }
19in.close();
20response.getOutputStream().close();
21
22%>
]]>
1安装
1.1 iReport的安?/h2>
iReport直接解压后,?font size="+0">J2SDK\lib
目录下的tools.jar拯?font size="+0">iReport\lib目录下,然后?font size="+0">iReport目录下运?font size="+0">iReport.bat卛_?br />需要注意的?font size="+0">tools.jar的版本必要与本机安装的jre一_也就是说Q如果系l安装的?font size="+0">jre1.4.2必ȝjdk1.4.2?font size="+0">tools.jar?br />1.2 JapserReport开发(q行Q环境的搭徏
2 开发流E?/h1>
JasperCompileManager JasperFillManager JasperPrintManager JasperExportManager JasperRunManager 3 注意事项
<%
@ page contentType
=
"
text/html;charset=GBK
"
%>
<%
@ page import
=
"
dori.jasper.engine.*
"
%>
<%
@ page import
=
"
java.util.*
"
%>
<%
@ page import
=
"
java.io.*
"
%>
<%
@ page import
=
"
java.sql.*
"
%>
<%
@ page import
=
"
com.zx.report.util.CarUse
"
%>
<%
@ page import
=
"
dori.jasper.engine.data.*
"
%>
<%
Connection conn
=
null
;
Statement st
=
null
;
ResultSet rs
=
null
;
byte
[] bytes
=
null
;
List carUseList
=
new
ArrayList();
try
{
Class.forName(
"
com.microsoft.jdbc.sqlserver.SQLServerDriver
"
);
conn
=
DriverManager.getConnection(
"
jdbc:microsoft:sqlserver://10.10.10.207:1433;DatabaseName=report;user=sa;password=111111
"
);
//
以输入流方式
InputStream reportFile
=
getClass().getClassLoader().getResourceAsStream(
"
carUserBd.jasper
"
);
//
以reportFile方式
//
File reportFile =new File(request.getRealPath("/report/carUserBd.jasper"));
Map parameters
=
new
HashMap();
String sqlCarUser
=
"
SELECT car.carNo, dept.Name , people.peopleName,carUse.useDescription ,
"
+
"
carUse.beginTime , carUse.planEndTime , carUse.comment , carUse.driver,
"
+
"
carUse.peopleNumber ,OneWay= case carUse.isOneWay when 0 then '双程' else '单程' end,
"
+
"
isFirst= case carUse.priority when 0 then '? when 1 then '? else '? end, carUse.start ,
"
+
"
carUse.destination , people.peopleName as ratifier FROM DEPT_CARUSELOG carUse , DEPT_CARINFO car ,
"
+
"
ADMIN_ORGANIZATION dept , PUBLIC_PEOPLEINFO people WHERE carUse.id=290 and
"
+
"
caruse.carId=car.carId and carUse.departId=dept.id and carUse.peopleId=people.peopleId
"
;
st
=
conn.createStatement();
rs
=
st.executeQuery(sqlCarUser);
while
(rs.next())
{
CarUse carUse
=
new
CarUse();
carUse.setCarNo(rs.getString(
1
));
carUse.setName(rs.getString(
2
));
carUse.setPeopleName(rs.getString(
3
));
carUse.setUseDescription(rs.getString(
4
));
carUse.setBeginTime(rs.getDate(
5
));
carUse.setPlanEndTime(rs.getDate(
6
));
carUse.setComment(rs.getString(
7
));
carUse.setDriver(rs.getString(
8
));
carUse.setPeopleNumber(rs.getString(
9
));
carUse.setOneWay(rs.getString(
10
));
carUse.setIsFirst(rs.getString(
11
));
carUse.setStart(rs.getString(
12
));
carUse.setDestination(rs.getString(
13
));
carUse.setRatifier(rs.getString(
14
));
carUseList.add(carUse);
}
JRBeanCollectionDataSource ds
=
new
JRBeanCollectionDataSource(carUseList);
bytes
=
JasperRunManager.runReportToPdf(
reportFile,
parameters,
ds);
String fileName
=
"
test.pdf
"
;
response.setContentType(
"
application/pdf
"
);
response.addHeader(
"
Content-Disposition
"
,
"
attachment;filename=\
""
+ fileName);
response.setContentLength(bytes.length);
ServletOutputStream ouputStream
=
response.getOutputStream();
System.
out
.println(
"
5
"
);
ouputStream.write(bytes,
0
, bytes.length);
ouputStream.flush();
ouputStream.close();
}
catch
(SQLException sqle)
{
System.
out
.println(
"
SQLException:
"
+
sqle.getMessage());
}
catch
(JRException e)
{
e.printStackTrace();
}
catch
(ClassNotFoundException cnfe)
{
}
%>
jasperreport可以用Collection做ؓ数据源,q种方式比用Connection方式更ؓ灉|方便
]]>
下面把我这几天做的一些东西记录下来···?br />其中提出一些特别要注意的地方(我就是在那几个地Ҏ(gu)费了些时_···
1、先介绍一下ireport及asperreports吧···?br />Jasperreport是一个报表制作程序,用户需要按照它制定的规则编写一个XML文gQ?br />然后得到用户需要输出的格式文g。它支持输出的文件格式包括PDF,HTML,XML,XLS,CVS{等?br />而iReport是一个制作Jasperreport的XML文g的可视化开发工兗?/font>
2、下载ireport和jasperreports···
jasperreport下蝲地址Q(我下的是jasperreports-0.6.8Q?/font>
http://jasperreports.sourceforge.net
ireport下蝲地址Q(我下的是iReport0.5.0Q?/font>
http://ireport.sourceforge.net
3、下载了ireport它解压~以后运行iReport.bat文gQ过大约30U如果能出现ireport的主H体
则表明你的系l已l可以运行ireport了,但是我的不行Q所以我~辑目录下的iReport.bat文gQ?br />代码如下····
@echo off
set JAVA_HOME=C:\j2sdk1.4.0_03
set ANT_HOME=C:\ant
set IREPORT_HOME=C:\Documenti\progetti\iReport\iReport2\
rem %ANT_HOME%\bin\ant javadocs
%ANT_HOME%\bin\ant iReport
----------------
q里是采用ant来运行的Q所以还需要下载一个ant···
如果你没有安装ant的话也可以找到noAnt文g夹下的startup.bat文g卛_q行···
4、数据库···
我是用的mysql数据库,之前配置数据库的JDBC驱动器一直不成功原因是我下的mysql的jdbc驱动太老了Q?br />和ireport的不兼容····
?/font>
http://dev.mysql.com/downloads/
下蝲最新版本··?/font>
5、配|数据库q接····
q个是报表与数据库的接口Q通过<资料来源>--<q接/资料来源>开启配|对话框Qireport会记录以前用的
所有连接,除非你手工删除这些连接,否则q接一直存在··?br />配置新连接界面如下:
提示Q如果你需要报表提供中文内Ҏ(gu)C可以在JDBC URL下工夫,比如输入Q?br />jdbc:mysql://localhost/xiaoya?user=root&password=root&useUnicode=true&characterEncoding=GB2312
6、中文问题···?br />解决pdf中文问题需要下载itextasian.jar和itext-1.3.jarQ将其下载后攑ֈireport/lib下即可·?br />要在q里提一下的是之前我也下载了q两个东东放到指定的位置了可q是qQ后来还是解决了··
解决Ҏ(gu)Q?br />在iReport中新Z个TextField的时候会自动把pdf字体设ؓCP1252Q这个是需要修改的Q?br />否则pdf输出会报错说找不到字体,我就被这个捆饶了很久Q修改如图:
7、理解几个重要的概念····
a、iReport的输出格式···?br /> iReport的预览输出格式可以支持以下几U:
PDF、HTML、CSV、JAVA2D、Excel、纯文字、JRViewerQ其中最常用的是PDF、JRViewer?br /> 本文以JRViewerZ子。JRViewer是直接以C/S方式作ؓ报表的输出格式,在JFrame框架下输出。Jasperreport提供默认的JRViewer输出cR?br /> b、报表的动态对象变量、参数、字D···?br /> 在用iReport的过E中会碰到很多与变量QVariablesQ、参敎ͼParametersQ、字D(FieldsQ这些有关的内容Q我们要介绍q些对象的用和意义Q?br /> ·字段QFieldsQ:是数据库抽取出来的,希望在报表中出现的数据库内容?br /> 比如一个ID的所有倹{?F{ filedsName }
·参数QParametersQ:q是你的应用需要提供给报表的入口,
比如你希望在报表被解释的时候提供Where语句的条件|
那么可以用参敎ͼParametersQ?P{ parameterName }
·变量QVariablesQ:q是报表中一些逻辑q算的表玎ͼ比如l计倹{?V{ variablesName }
每种对象的定义格式如每个对象的后面说明,比如定义一个变量(VariablesQ,
那么表达式就写成$V{ variablesName }Q报表中出现的就是这个变量的名称?br /> c、编译、静态运行、动态运行··?br /> Jasperreportq行旉要的是一个jasper后缀的文Ӟ~译q程其实是把jrxml后缀的文件生成jasper后缀的文件。(可以参考Jasperreport的运行原理) 静态运行和动态运行是相对的,后者带数据源运行,比如带数据库q行。前者就是静态文本运行,和数据源无关Q如果报表中出现和数据源有关的对象,则以null昄?br /> d、报表的l构···
一个报表的l构大致是几个部分:title、pageHeader、columnHeader、detial、columnFooter、pageFooter、summary、groupHeader、groupfooter?br /> ·TitleQ每个报表一般会有一个名字,比如×××销售报表,title是搁置q个名称的最好地方了Q当然你也可以根据需要搁|在合适的地方?br /> ·pageHeaderQ报表的一些公p素,比如늠、创建时间、创Zh{信息放|在q里是比较好的选择?br /> ·columnHeaderQ无可非议的q里是放|列的名UͼC不是列数据?br /> ·DetialQ放|需要@环的数据Q比如销售记录数据?br /> ·columnFooterQ放|列U别的统计计值或是列的说明?br /> ·pageFooterQ放|页U别的统计值或是页的说明?br /> ·SummaryQ可能需要对几页Q你的报表可能有几个늻成)的统计倹{比?0个销售记录共占用?,那么攄q些l计记录的统计值最好的地方是summary?br /> ·groupHeaderQ每个表的内容可能需要根据某个属性进行划分显C内容和计算内容Q比如希望以月䆾为单位每l分开昄销售记录,那么可以定义一个组Q组的定义参考后文)QgroupHeader是攄l说明或是组标志最好的地方?
·GroupfooterQ放|组的统计或是说?/font>
8、徏立一个新的报表····?/font>
a、新Z个空报表的基本配|?br /> 单击工具栏的W一个工具“New Report”,新徏一个报表,输入报表名称和定义报表的一些参敎ͼ比如名称输入Q例子是做一个项目的Bug量统计报表)单击【More?】选择标签Q填写或是选择XML~码Q这是关pd你的XML支持的字W集的选择Q请Ҏ(gu)需要选择Q比如需要你的XML文g支持中文Q那么可以输入或是GBKQ之后点凅ROK】按钮,q入报表的设计界面?br /> b、定义报表可能需要的字体cd及其属?br /> 一个报表的内容五花八门Q有
按照图中的顺序填写信息和步骤Q依ơ定义“表头”、“组”、“列”、“列内容”、“统计计”、“其他”等6中字体组合?br /> 注意PDF内嵌字体的选择Q如果你需要报表时以PDF文g格式提供Q那么对此需要作出选择?br /> 9、向表添加对象···?br /> a、添加静态对象··?br /> 可以通过工具栏的工具d静态对象,比如文本Q点凅RT】,之后在报表的I白处单击,如此卛_把静态对象添加到报表Q然后拖动对象的Ҏ(gu)Q它的大小合适,双击对象弹出对象的属性配|对话框Q切换到【Font】LabelQ在“Report font”的ComBox选择“表头”字体,Q表头字体是前文提供的自定义属性组合)Q再切换到【Static Text】LabelQ修改表头的名字Q比如“Bugl计报表”或是“销售记录统计表”等{与业务有关的内宏V添加图片,L凅RImage Tool】,之后的操作与TextcM。其他静态对象操作步骤类伹{?br /> b、用连接··?br /> q记得前文提供的Q?.2节)配置MySql数据库连接吗Q这里我们将要用前文配|的q接了。选择菜单【徏立】-【用动态连接】开启可选的动态连接, 选择M一个你需要的q接最后【OK】,保存报表Q这样你的报表就使用了这个连接了?br /> *【特别提C?/strong>此连接必M以后应用E序使用的连接一致?br /> c、创建SQL查询语句····
SQL语句是对MRDBMS起作用的语言Q外部用户需要用这些语a理l护数据库中的数据,同样的,iReport也是需要这么做Q我们需要提供查询数据库的语aQSQL语句Q这PiReport卛_通过此SQL语句获取数据Q之后组l到报表中ƈ昄出来Q以满用户的需要ؓ目的?br /> 通过菜单【资料来源】-【报表查询】开启SQL输入对话框,q在【Report SQL Query?Label中输入SQL语句如图Q图中的“Automatically Retrieve Fields”checkbox和“ReadFields”Button是确认自动获取还是手动获取数据库表的可用Fields。单凅ROK】,保存报表?br />
d、创建字D动态对象····?br /> 报表的动态对象有变量、参数、字D,前文提及了他们的概念Q这里将要一一讲解如何使用。字D也是数据库中的字D,通过菜单【预览】-【报表字Dc开启字D늚列表Q工h上可以找到相应的工具Q,可以拖放L字段到报表的M位置Q比如拖动一部分Bug的内容字D到detialD(内容无关紧要Q只要知道原理)?br /> e、创建组···
l是一个很重要的概念,一个报表可以多个组Q每个组以一个关键字为标讎ͼ比如希望Bugl计是根据项目(或是产品Q进行统计的。那么可以设立一个项目标记的l。如图:
l的参数讑֮可以看界面即可理解部分,其中最主要的是“Group expression”,q是必须输入格式正确的ƈ且存在的字段名称Q本文的“proname”是【字Dc中的一个元素。依此类推,建立其他的组对象?br /> 每徏立一个组Q在报表的界面上都会出现该组对应的段Q如图:他们是首֯应出现的。(Header和FooterQ?br />
f、添加参数和使用参数····
我们重申参数作用Q一般是需要外界提供参数给报表的入口,比如SQL语句的where条g的表辑ּ。通过【预览】-【报表参数】开启报表参数列表对话框Q工h上可以找到相应的工具Q。如图:输入名称及其他参数。【ok?保存报表?br /> 那么如何使用呢?打开SQL语句对话框,参考?.3创徏SQL查询语句”,q时候的SQL语句应该是:SELECT * FROM bugs where proname=$P{ProjectName} order by proname,modulename
注意其中的红体字部分Q就是把刚才定义?nobr>变量q用到SQL语句了。这样当应用提供参数Ӟ只要指定提供l这个参敎ͼ那么报表解释引擎卛_替换q些变量然后再执行SQL语句Q在W二部分提到~程Ӟ会提供参数设定代码?br />
g、添加变量和使用变量····
变量的定义类似参敎ͼ通过【预览】-【报表变量】开启报表变量列表对话框Q工h上可以找到相应的工具Q,如图Q图中定义的变量的作用是Q定义一个Bug的计数器Q数据类型是java.lang.Integer,使用Count函数q行l计字段testerQ作用范围是模块l,也就是统计模块的Bug量。其中的tester可以Ҏ(gu)其他非组对象Q比如proname是组对象Q就不要用作q里的统计参数。以上提供的是自定义变量Q其实iReportpȝq有提供一些内嵌(BuildinQ的变量Q比如页码,行记录数{,视需要而用?br />
10、最后的报表····
a、完成后的报表··?br />
b、预览报表··?br /> 点击动态运行报表,出现如图内容Q?br />
11、在jsp中调用报表····?br /> 解决q个问题也用了我差不?天时?(Q但ȝ是搞定了·····
下面分别介绍以pdf格式和以html格式昄报表····
a、pdf格式ireport_pdf.jsp····
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
<%
//报表~译之后生成?jasper 文g的存放位|?br /> File reportFile = new File(application.getRealPath("ireport/xueji.jasper"));
//q个是用来联接我的mysql 的JDBC URL
String url="jdbc:mysql://localhost:3306/xueji?useUnicode=true&characterEncoding=gb2312";
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
//传递报表中用到的参数?br /> Map parameters = new HashMap();
//"Name"是报表中定义q的一个参数名U?其类型ؓString ?/font>
parameters.put("banji", new String(" c1"));
System.out.println("---------conn-------------");
//q接?nobr>数据?/a>
Connection conn = DriverManager.getConnection(url,"root","root");
System.out.println("---------Jasper begin-------------");
//在控制台昄一下报表文件的物理路径
System.out.println(reportFile.getPath());
byte[] bytes=JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,conn);
System.out.println("---------Jasper end-------------");
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
%>
b、html格式ireport_html.jsp····
<%
File reportFile = new File(application.getRealPath("/ireport/xueji.jasper"));
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
Map parameters = new HashMap();
parameters.put("baiji", "c1");
//parameters.put("BaseDir", reportFile.getParentFile());
//JRBeanArrayDataSource jrDataSource = new JRBeanArrayDataSource(objects);//objects打印的实体数l;
Class.forName("org.gjt.mm.mysql.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/xueji","root","root");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
JRHtmlExporter exporter = new JRHtmlExporter();
StringBuffer sbuffer = new StringBuffer();
Map imagesMap = new HashMap();
session.setAttribute("IMAGES_MAP", imagesMap);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
//exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
//exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "/ireport/ireport_html.Image?image=");
//exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "
");
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
exporter.exportReport();
//out.flush();
conn.close();
% >
注意Q以html格式调用主要要注?/exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
//exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "images目录的\?image=");
在生成html预览的时候会生成一个px文gQ而这个images_uri的\径就是那个px的\径,不用Q就用下?br /> 的语句就可以了···?
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
而这个语句则是处理分는的···· ?
//exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "
");
需要注意的地方····
必须在tomcat5以上版本中运行···?br />在运行的时候还要将jasperreports/lib下的包全部拷到tomcat下你所放文件目录下的win-inf/lib下··?br />特别要注意的是看看ireport/lib下的包与jasperreports/lib的包是否兼容···
之前我的一直有问题是因ؓ我的发布环境是jasperreports-0.6.7.jar而运行环境是jasperreports-0.6.8.jar···
q样也会出现错误的···?/font>
参考资料···?br />感谢···
http://www-128.ibm.com/developerworks/cn/java/j-ireport/?ca=dwcn-newsletter-java
http://blog.csdn.net/jemlee2002/archive/2004/10/05/125107.aspx