Ireport第一张web项目报表。
原先项目里面的统计分析报表都是和普通的系统页面一样开发的,SSM架构,从数据库一层一层往前面传数据,最后通过jsp表现出来,这次在领导的建议下使用IReport进行报表开发,果然还是要使用工具啊,社会要分工,功能要封装,不要重复造轮子啊,能够使用别人的工具是最好的啦,这样效率高,质量好,进步大。
1、Ireport安装
去网上下载iReport-5.6.0-windows-installer.exe,注意这里的版本,后期的jar包需要同步的版本。安装很简单,只需要使用默认设置,一路安装到底就行。
2、数据库配置
IReport支持很多种数据来源,最常用的是直接连接数据库,通过写sql语句查询,这种是最方便的。打开IReport界面,如果是第一次打开会有welcome页面,可以根据导向直接配置,但实际上一样的,
2.1打开数据库配置按钮

2.2 配置数据库连接

2.3 添加Oracle驱动
在工具-选项中导入ojdbc14-1.0.0.jar

2.4 导入jar包以后发现Oracle(oracle.jdbc.driver.OracleDriver)变成黑色可选了,然后配置好数据库的url和账户,点击测试。

3 新建Report
3.1 点击 文件-new,选择模板,比如选择第一种。

3.2 得到基本属性
点击报表右键,选择Edit-Query

3.3 构建表结构
将Static Text拖到Column Header中,输入相应字段





也可以直接右键编辑相关的属性,尤其是Expression和Padding,Expression可以设置表达式,padding设置边框线条,右侧属性设置宋体,


3.4 动态查询


4 预览和编译
也可以右键Compiler Report,会生成项目所需要的配置文件。

5、Ireport与Web项目整合。
5.1将ireport生成的配置文件拷贝到WebContent下面,新建一个文件夹存放

后台代码如下:
package com.enjoyor.soa.traffic.server.tms.controller;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.enjoyor.soa.traffic.server.tms.util.SpringReader;
import com.enjoyor.soa.traffic.util.helper.IReportHelper;
import com.enjoyor.soa.traffic.util.helper.JsonHelper;
/* *
* 挖占报表
**/
@Controller
@RequestMapping(value = "/wzReportInfo")
public class IreportController {
@RequestMapping(value="getReportHtml",produces = {"application/json;charset=UTF-8"})
public @ResponseBody void getReportHtml (HttpServletRequest request,HttpServletResponse response){
try {
exportReport(request,response,"html");
} catch (Exception e) {
e.printStackTrace();
}
}
@RequestMapping(value="getWzztReportHtml",produces = {"application/json;charset=UTF-8"})
public @ResponseBody void getWzztReportHtml (HttpServletRequest request,HttpServletResponse response){
try {
exportReport(request,response,"html");
} catch (Exception e) {
e.printStackTrace();
}
}
public void exportReport(HttpServletRequest request,HttpServletResponse response,String rptType){
try {
String requestString = request.getParameter("data")==null?"":request.getParameter("data");
Map<String,Object> map = new HashMap<String,Object>();
if(!requestString.isEmpty()){
map = JsonHelper.jsonStrToMap(requestString);
}
byte[] bytes = null;
if(rptType.endsWith("excel")){
bytes = IReportHelper.GetReportExcel(request.getSession().getServletContext().getRealPath("/") +"reports\\"+map.get("reportName")+".jasper", map, getConn());
response.setHeader("Content-Disposition","attachment;filename="+map.get("reportName")+".xls");
}else if(rptType.endsWith("html")){
bytes = IReportHelper.GetReportHtml(request.getSession().getServletContext().getRealPath("/") +"reports\\"+map.get("reportName")+".jasper", map, getConn());
response.setHeader("Content-Disposition","attachment;filename="+map.get("reportName")+".html");
}
response.setContentType("application/ms_word");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public Connection getConn() {
Connection connection = null;
try {
String ipConfig = com.enjoyor.soa.traffic.server.tms.util.SpringReader.getProperty("ipConfig");
String driverName = SpringReader.getProperty("jdbc.databasedrive");
Class.forName(driverName);
String url = SpringReader.getProperty("jdbc.databaseurl");
String username = SpringReader.getProperty("jdbc.username");
String password = SpringReader.getProperty("jdbc.password");
connection = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
System.err.println("Could not find the database driver");
} catch (Exception e) {
System.err.println("Could not connect to the database");
}
return connection;
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~IreportHelper~~~~~~~~~~~~~
package com.enjoyor.soa.traffic.util.helper;
import java.io.ByteArrayOutputStream;
import java.sql.Connection;
import java.util.Collection;
import java.util.Map;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRRtfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
/**
* 用于生成IReport报表生成
* @author sxh
* @version 创建时间:2015-4-1
* @类说明
*/
public class IReportHelper {
public static byte[] GetReportPdf(String fileName,Map<String,Object> param,Connection conn){
try {
byte[] bytes;
bytes=JasperRunManager.runReportToPdf(fileName,param,conn);
return bytes;
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public static byte[] GetReportPdf(String fileName,Map<String,Object> param){
try {
byte[] bytes;
bytes=JasperRunManager.runReportToPdf(fileName, param);
return bytes;
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public static byte[] GetReportPdf(String fileName,Map<String,Object> param, Collection list){
try {
byte[] bytes;
JRDataSource jrDataSource = new JRBeanCollectionDataSource(list);
bytes=JasperRunManager.runReportToPdf(fileName, param,jrDataSource);
return bytes;
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public static byte[] GetReportRtf(String fileName,Map<String,Object> param, Collection list){
try {
JRDataSource jrDataSource = new JRBeanCollectionDataSource(list);
JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, param, jrDataSource);
JRRtfExporter rtfExporter = new JRRtfExporter();
ByteArrayOutputStream out = new ByteArrayOutputStream();
rtfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
rtfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
rtfExporter.exportReport();
return out.toByteArray();
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public static byte[] GetReportHtml(String fileName,Map<String,Object> param, Collection list){
try {
JRDataSource jrDataSource = new JRBeanCollectionDataSource(list);
JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, param, jrDataSource);
JRHtmlExporter exporter = new JRHtmlExporter();
ByteArrayOutputStream out = new ByteArrayOutputStream();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
exporter.exportReport();
return out.toByteArray();
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public static byte[] GetReportHtml(String fileName,Map<String,Object> param, Connection conn){
try {
LoggerHelper.LOG.info("测试5");
JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, param,conn);
LoggerHelper.LOG.info("测试6");
JRHtmlExporter exporter = new JRHtmlExporter();
ByteArrayOutputStream out = new ByteArrayOutputStream();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
exporter.exportReport();
return out.toByteArray();
} catch (Exception e) {
// TODO Auto-generated catch block
LoggerHelper.LOG.error("html页面报错:"+e.getMessage());
e.printStackTrace();
return null;
}
}
public static byte[] GetReportExcel(String fileName,Map<String,Object> param, Connection conn){
try {
JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, param,conn);
JRXlsExporter exporter = new JRXlsExporter();
ByteArrayOutputStream out = new ByteArrayOutputStream();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
exporter.exportReport();
return out.toByteArray();
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String ipConfig = com.enjoyor.soa.traffic.server.tms.util.SpringReader.getProperty("ipConfig");
%>
<div class="easyui-layout">
<div class="easyui-panel pd20" style="height: 105px">
<div class="m-form-row">
<div class="m-form-cell">
<label style="width: 85px" for="search-box">挖占开始时间:</label> <input
id="startTime" class="easyui-datebox" />
</div>
<div class="m-form-cell">
<label style="width: 85px" for="search-box">挖占结束时间:</label> <input
id="endTime" class="easyui-datebox" />
</div>
<div class="m-form-cell">
<a href="#" onclick="serchRo()" class="easyui-linkbutton">查询</a>
</div>
</div>
</div>
</div>
<div class="m-form" id="m-form" style="height: 505px">
<iframe id="iframe_report" name="iframe_report" frameborder="0" src="" width="100%" height="100%"></iframe>
</div>
<script src="js/ireport/cxinit.js"></script>
<script>
var basePath="<%=basePath%>";
var picPath = null;
$(document).ready(function() {
});
</script>
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
js代码如下:
//获取报表
function serchRo() {
var obj = new Object();
var startTime = $("#startTime").textbox("getValue");
var endTime = $("#endTime").textbox("getValue");
obj.START_TIME = startTime;
obj.END_TIME = endTime;
searchRo("iframe_report", "wzReportInfo/getReportHtml.htm", "reportTms", obj);
}
//获取报表
/*
* id 报表生成后放置的位置
* url 报表请求的地址
* reportName 报表对应jsaper的名字(不加后缀)
* obj 查询参数
*/
function searchRo(id, url, reportName, obj) {
obj.reportName = reportName;
var data = JSON.stringify(obj);
$.ajax({
url : url,
type : "POST",
data : {
data : data
},
success : function(result) {
var frame = window.frames[id];
frame.document.close();
frame.document.write(result);
}
});
}
效果图:

常遇问题(主要是jar包):
1、加载数据时JasperFillManager.fillReport(jasperReport, parameters1, new JRBeanCollectionDataSource(xx));不报错,但是程序运行不下去了。
原因是jar版本过低或是冲突,检测所应用的jar包,特别是需要jasperreports-5.6.0.jar,如果是jasperreports-5.0.1.jar包要删除。还要注意groovy-all-2.0.1.jar。
2、 Font 'fonts/simsun.ttc' is not available to the JVM
原因是jar包冲突,在pom.xml文件中Effective Pom中检查将Ireport核心jar冲突的都删除
3、org.olap4j:olap4j:jar:0.9.7.309-JS-3 is missing 自己下载包olap4j-0.9.7.309-JS-3-jar
PS 样式-去除column footer与details之间的空白:右键报表名称 属性,more 选中float coumn footer,再删除summary。
Ireport第一张web项目报表。的更多相关文章
- maven学习系列教程,第一课(web项目的搭建)
1.现在一般eclipse都已经装好了maven板块,无需自行下载安装,所以我们的第一步就是新建一个maven project 2地址使用默认的就行 3这边筛选一下,选择webapp 4. 5.建好后 ...
- 第一章 创建WEB项目
第一章 创建WEB项目 一.Eclipse创建WEB项目 方法/步骤1 首先,你要先打开Eclipse软件,打开后在工具栏依次点击[File]>>>[New]>>&g ...
- 两张图搞清楚Eclipse上的Web项目目录
从MyEclipse转到Eclipse起初有点不习惯eclipse的目录结构,顺手一查看到的文章帮助很大,转载一下: 原文链接:https://www.jianshu.com/p/91050dfcbe ...
- idea创建第一个普通java web项目
1.新建项目(工作空间) 选择空项目 输入项目名称,点击完成 系统会默认选中Modules,点击上面的小+号创建模块->New Module 新建一个Java EE Web Applicatio ...
- 记自己的第一个完整的java web项目
我是从asp.net平台转到java平台的.基于asp.net平台开发网站的快速便捷性,工作几年来大小网站多少也写了6.7个.但是转到java后,因为是在一家大公司,而且做的功能也比较单一,局限于此, ...
- 将本地web项目发布到ubuntu上并运行 第一个本地的.net core2.0项目
前置条件 ubuntu已安装dotnet 发布版本dotnet与发布机一致 这里用的是vm 所以直接把本地web项目拷贝到vm中运行的ubuntu系统中 web站点需要将 webapplication ...
- 基于 HTML5 的 Web SCADA 报表
背景 最近在一个 SCADA 项目中遇到了在 Web 页面中展示设备报表的需求.一个完整的报表,一般包含了筛选操作区.表格.Chart.展板等多种元素,而其中的数据表格是最常用的控件.在以往的工业项目 ...
- 【BIRT】02_开发一张简单的报表
上一节我们已经将开发环境准备完毕,那么接下来就开发一张简单的报表 1.BIRT开发环境 打开已经安装好的BIRT开发环境 1.1新建Project 菜单栏>> file >> ...
- 酒店管理web项目总结
酒店管理web项目总结 半个月的努力,一个完整的酒店项目也就新鲜出炉了,在项目的制作中总结了一些酒店管理项目的特点. 1.需求分析,酒店管理需要什么? 1)首先系统的安全性,对于任何一个系统来说,安全 ...
随机推荐
- seaborn画热力图注意的几点问题
最近在使用注意力机制实现文本分类,我们需要观察每一个样本中,模型的重心放在哪里了,就是观察到权重最大的token.这时我们需要使用热力图进行可视化. 我这里用到:seaborn seaborn.hea ...
- hbase运行mapreduce设置及基本数据加载方法
hbase与mapreduce集成后,运行mapreduce程序,同时需要mapreduce jar和hbase jar文件的支持,这时我们需要通过特殊设置使任务可以同时读取到hadoop jar和h ...
- ldap,openldap-docker,
ldap basic and usage in devops: https://blog.csdn.net/weixin_42578481/article/details/80863890 maybe ...
- day0315 迭代器
一. 迭代器 1.什么是可迭代器? 除了数字和布尔值之外,其他数据类型都是可迭代对象.(字符串,列表,元组,字典,集合) 2.可迭代协议 2.1 可以被迭代要满足的要求就叫可迭代协议,可迭代的定义非常 ...
- mysql与redis在各种情况下性能对比
数据表结构 CREATE TABLE `jx_goods_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `goods_name` varchar(100) ...
- [maven] 初试maven
环境 CentOS 6 一, 安装: [root@okk ~]# wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.0/binaries ...
- Appium-两个小报错
(1) 执行脚本appium报错:> info: [debug] Emulator not running appium设置中取消勾选launch avd解决 (2)执行脚本python ...
- python摸爬滚打之day06----小数据池、编码解码
1.小数据池 代码块: 一个模块, 一个函数, 一个类, 甚至每一个command命令都是一个代码块. 一个文件也是一个代码块.而不需要创建一个新的数据. 这样会节省更多的内存区域. 在cmd命令行 ...
- 使用Bootstrap Popover实现一个弹框上三角形的代码记录
$(function () { var options = { trigger: 'manual', content: function ...
- 【leetcode】部分思路整理
题目: 求一个树的最小深度. 思路: 思路一:递归 若为空树返回0: 若左子树为空,则返回右子树的最小深度+1:(加1是因为要加上根这一层,下同) 若右子树为空,则返回左子树的 ...