1
安装
1.1 iReport
的安装
iReport
直接解压后,将
J2SDK/lib
目录下的
tools.jar
拷贝到
iReport/lib
目录下,然后在
iReport
目录下运行
iReport.bat
即可。
需要注意的是 tools.jar 的版本必须要与本机安装的
jre
一致,也就是说,如果系统安装的是
jre1.4.2
就必须用
jdk1.4.2
的
tools.jar
。
1.2 JapserReport 开发(运行)环境的搭建
JasperReport
的开发环境必须要导入以下所有包:
1. JasperReport 包,如
jasperreports-0.6.1.jar
;
2. Aparche Common 包,包括
logging
、
digester
、
beanutils
、
collections
、
logging-api
;
3. iText 包,包括
itext-1.1.jar
和
iTextAsian.jar
(用于输出中文字符到
PDF
文件)
以上所有包(除了 iTextAsian.jar )都已经包含在
iReport/lib
目录下。
2 开发流程用iReport 可视化编辑生成的文件是jrxml 文档,这是一种xml 文件,记录了一份report 的详细信息,我们可以直接用写字板打开它编辑,iReport 就是一个方便我们生成和编辑jrxml 文件的工具,它也可以很方便地将jrxml 文件编译成jasper 报表文件。
jrxml 文件通过Jasper 编译之后就变成了jasper 文件,这份文件才是真正在程序中调用生成报表的report 文件。
但是有一点要注意的是,jasper 的各个版本编译出来的jasper 文件并不兼容,就是说用0.6.1 版编译出来的文件用0.6.4 版调用是会出错的,而iReport 自带的Jasper 版本是0.6.1 ,而jasper 的最新版本是0.6.4 。所以为了保持通用性,我建议只用iReport 来开发编辑jrxml 文件,而不编译成jasper 文件,在我们的打印报表程序中再即时编译一次。虽然这样效率可能会低了一点,但是保证了不同版本的兼容性。
在我们的程序中,要调用Jasper 的话,首先要得到一个数据库的Connection ,形如:Connection con = ...
需要往JasperReport 传参数的话只需要新建一个Map ,以参数名作为key ,需要传入的对象作为value ,譬如:
Map props = new HashMap();
props.put("name", new String("name"));
需要多个参数只需分别put 进Map 里去就可以了。
JasperReport 有如下几个主要的Manager :
JasperCompileManager
将jrxml 文件编译成jasper 文件或JasperReport 对象
JasperFillManager
从数据源中获取数据并填充
jasper
文件或
JasperReport
对象,产生
JasperPrint
对象
JasperPrintManager
将
JasperPrint
对象直接输出到打印机打印
JasperExportManager
将
JasperPrint
对象导出成
PDF
或
HTML
文件(或流)
JasperRunManager
运行一个
jasper
文件或
JasperReport
对象并输出到
PDF
或
Html
文件(或流)中,我的理解是等于集成了
JasperFillManager
和
JasperExportManager
的功能
对于上述对象的详细说明请参阅 JasperReport 的文档。
例程:
例程: 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
块
e.printStackTrace();
} catch (SQLException e) {
// TODO 自动生成
catch
块
e.printStackTrace();
} catch (JRException e) {
// TODO 自动生成
catch
块
e.printStackTrace();
}
}
3 注意事项1 .iReport 中新建中文报表的时候记得要输入XML 编码GB2312 。
2 .iReport 中定义中文字体的时候,要选择PDF Font Name 为STSong-Light (宋体)、MHei-Medium (黑体)、MSung-Light ,在PDF Encoding 中选择GB-UCS2-H(Chinese Simplified) ,否则输出到PDF 时会乱码。
3 .用Report SQL 查询之后,可能会出现某些字段没有自动建立Field ,就需要在Field 中手动定义了。
需要注意的是 tools.jar
1.2 JapserReport
1. JasperReport
2. Aparche Common
3. iText
以上所有包(除了 iTextAsian.jar
2
jrxml
但是有一点要注意的是,jasper
在我们的程序中,要调用Jasper
需要往JasperReport
Map props = new HashMap();
props.put("name", new String("name"));
需要多个参数只需分别put
JasperReport
对于上述对象的详细说明请参阅 JasperReport
例程:
例程: 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
e.printStackTrace();
} catch (SQLException e) {
// TODO
e.printStackTrace();
} catch (JRException e) {
// TODO
e.printStackTrace();
}
}
3
2
3
本文标签: