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

本文标签: