使用数据库作为数据源进行报表绘制。
上一篇对于动态报表应该有了大致的了解,现在就进行第一次报表的产生
iReport报表绘制
不同版本的iReport在界面上会存在一些差异,以下文档基于iReport-5.5.0编写
1) 新建报表
【文件】à【New…】
选择一个模版,【Openthis Template】
通过【Browse】选择文件保存位置,并填写报表名称【Report name】
完成
2) 创建Database Sources
点击【ReportDatasources】图标
【New】
选择一个datasourcetype,这里选【Database JDBC connection】
填写数据库连续的相关信息,并保存
勾选默认Datasources,并关闭窗口
3)
设置报表主要SQL
输入主要SQL,相应的结果集的列会出现在下方
4) 报表结构
5) 在Detail中使用SQL结果
6) 使用iReport内置变量
7) 使用报表外部参数
右键【Parameters】,选择【添加Parameter】
通过右侧的【属性面板】修改参数名称,并拖动到报表中
8) 使用Dateset 创建汇总报表 (次要SQL)
右键【报表名称】(比如report_test002),选择【Add Dataset】
填写Dataset名称,【下一步】
选择DataSources,并填写SQL语句
选择要使用的列,并【下一步】
使用Group组自动Group up,也可通过SQL进行Group up
通过【窗口à组件面板】打开组件面板
拖动Chart图标到报表中
选择一个图表类型,【OK】
选择要使用的DataSet(比如上文刚刚创建的myDataSet1)
填写Series描述
通过右侧按钮填写横坐标分组组名,即分组值
9) 预览报表
通过【预览】图标查看报表结果
如果有外部参数,将会弹出提示框要求录入
看到报表结果,可以通过【Designer】图标返回到设计界面
10)编译报表
通过【编译】图标,可以对报表进行编译
4、Java报表生成
1) 引用JasperReports Library
在Java Project中引入Jasper相关的jar包。(当然也需要DB 驱动的jar)
以下提供JasperReports 6.2.1版本的maven配置
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.0.3</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.7</version>
</dependency>
Oracle驱动的Maven配置
<dependency>
<groupid>com.oracle</groupid>
ojdbc6</artifactid>
<version>12.1.0.2</version>
</dependency>
3、将jar打开把里面的 文件考到项目中即可如图:
程序代码:
[java] view plain copy
1. package org.share.web;
2.
3. import java.io.File;
4. import java.io.FileInputStream;
5. import java.io.FileOutputStream;
6. import java.io.IOException;
7. import java.io.InputStream;
8. import java.util.ArrayList;
9. import java.util.HashMap;
10. import java.util.List;
11. import java.util.Map;
12.
13. import javax.servlet.http.HttpServletRequest;
14.
15. import net.sf.jasperreports.engine.JRDataSource;
16. import net.sf.jasperreports.engine.JREmptyDataSource;
17. import net.sf.jasperreports.engine.JasperExportManager;
18. import net.sf.jasperreports.engine.JasperFillManager;
19. import net.sf.jasperreports.engine.JasperPrint;
20. import net.sf.jasperreports.engine.JasperReport;
21. import net.sf.jasperreports.engine.JasperRunManager;
22. import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
23. import net.sf.jasperreports.engine.util.JRLoader;
24.
25. import org.share.domain.tree.entity.UserInfo;
26. import org.springframework.stereotype.Controller;
27. import org.springframework.web.bind.annotation.RequestMapping;
28. import org.springframework.web.bind.annotation.RequestMethod;
29.
30. @Controller
31. @RequestMapping(value="/CreatePDf")
32. public class CreatePDf {
33.
34. @RequestMapping(value="/c",method=RequestMethod.GET)
35. public void createFilePdf(HttpServletRequest request){
36.
37. //路径动态录入需要生产的pdf文件位置
38. String fileepath=request.getSession().getServletContext().getRealPath("template/repConReport.pdf");
39. FileOutputStream out=null;
40. InputStream input=null;
41. try{
42. //判断文件是否存在
43. File f=new File(fileepath);
44. if(!f.exists()){
45. f.createNewFile();
46. }
47.
48. Map<String, Object> parameters=new HashMap<String, Object>();
49. parameters.put("title", "张散弹");
50. parameters.put("head", "nininn好好好好");
51. //模板文件
52. String ctxpathIreport=request.getSession().getServletContext().getRealPath("jasper/report3.jasper");
53. File reportFile=new File(ctxpathIreport);
54. // JasperReport jasperReport=(JasperReport)JRLoader.loadObject(reportFile);
55. // JasperPrint jasperPrint=JasperFillManager.fillReport(jasperReport, parameters);
56. input = new FileInputStream(reportFile);
57. out=new FileOutputStream(f);
58. //前面两个都是流 parameters 设置页面上的数据 最后一个数据源为空
59. JasperRunManager.runReportToPdfStream(input, out, parameters, new JREmptyDataSource());
60. //JasperExportManager.exportReportToPdfFile(jasperPrint,fileepath);
61. }catch (Exception e) {
62. e.printStackTrace();
63. }finally{
64. //关闭流
65. try {
66. out.close();
67. } catch (IOException e) {
68. e.printStackTrace();
69. }
70. try {
71. input.close();
72. } catch (IOException e) {
73. e.printStackTrace();
74. }
75. }
76. }
77. }
2)使用JasperReports Library导出文件
public class JasperReportsDemo001 {
public static void main(String[] args)throws Exception {
//加载DB驱动,并获得DB连接
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@192.168.100.26:1521:LSSRTEST";
String user = "myUserName";
String password = "myPassword";
Connection conn = DriverManager.getConnection(url, user, password);
//设定报表所需要的外部参数内容
Map<string, object=""> rptParameters = new HashMap<string, object="">();
rptParameters.put("myParam", "hello world");
//传入报表源文件绝对路径,外部参数对象,DB连接,得到JasperPring对象
JasperPrint jasperPrint = JasperFillManager.fillReport("D:/temp/jasper_test/report_test001.jasper", rptParameters, conn);
//导出PDF文件
JasperExportManager.exportReportToPdfFile(jasperPrint, "D:/temp/jasper_test/test.pdf");
//导入HTML文件
JasperExportManager.exportReportToHtmlFile(jasperPrint, "D:/temp/jasper_test/test.html");
//执行结束
System.out.println("Export success!!");
}
}