原先项目里面的统计分析报表都是和普通的系统页面一样开发的,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项目报表。的更多相关文章

  1. maven学习系列教程,第一课(web项目的搭建)

    1.现在一般eclipse都已经装好了maven板块,无需自行下载安装,所以我们的第一步就是新建一个maven project 2地址使用默认的就行 3这边筛选一下,选择webapp 4. 5.建好后 ...

  2. 第一章 创建WEB项目

    第一章   创建WEB项目 一.Eclipse创建WEB项目 方法/步骤1 首先,你要先打开Eclipse软件,打开后在工具栏依次点击[File]>>>[New]>>&g ...

  3. 两张图搞清楚Eclipse上的Web项目目录

    从MyEclipse转到Eclipse起初有点不习惯eclipse的目录结构,顺手一查看到的文章帮助很大,转载一下: 原文链接:https://www.jianshu.com/p/91050dfcbe ...

  4. idea创建第一个普通java web项目

    1.新建项目(工作空间) 选择空项目 输入项目名称,点击完成 系统会默认选中Modules,点击上面的小+号创建模块->New Module 新建一个Java EE Web Applicatio ...

  5. 记自己的第一个完整的java web项目

    我是从asp.net平台转到java平台的.基于asp.net平台开发网站的快速便捷性,工作几年来大小网站多少也写了6.7个.但是转到java后,因为是在一家大公司,而且做的功能也比较单一,局限于此, ...

  6. 将本地web项目发布到ubuntu上并运行 第一个本地的.net core2.0项目

    前置条件 ubuntu已安装dotnet 发布版本dotnet与发布机一致 这里用的是vm 所以直接把本地web项目拷贝到vm中运行的ubuntu系统中 web站点需要将 webapplication ...

  7. 基于 HTML5 的 Web SCADA 报表

    背景 最近在一个 SCADA 项目中遇到了在 Web 页面中展示设备报表的需求.一个完整的报表,一般包含了筛选操作区.表格.Chart.展板等多种元素,而其中的数据表格是最常用的控件.在以往的工业项目 ...

  8. 【BIRT】02_开发一张简单的报表

    上一节我们已经将开发环境准备完毕,那么接下来就开发一张简单的报表 1.BIRT开发环境 打开已经安装好的BIRT开发环境 1.1新建Project 菜单栏>> file >> ...

  9. 酒店管理web项目总结

    酒店管理web项目总结 半个月的努力,一个完整的酒店项目也就新鲜出炉了,在项目的制作中总结了一些酒店管理项目的特点. 1.需求分析,酒店管理需要什么? 1)首先系统的安全性,对于任何一个系统来说,安全 ...

随机推荐

  1. Some untracked working tree files would be overwritten by checkout. Please move or remove them before you can checkout. View them

    Some untracked working tree files would be overwritten by checkout. Please move or remove them befor ...

  2. React 入门实例

    React 入门实例教程 一.安装 React 的安装包,可以到官网下载. $ git clone git@github.com:ruanyf/react-demos.git 如果你没安装 git, ...

  3. SQL Server 查询数据库中被锁定的表

    在一次测试过程中,发现有些表一直被锁定,从网上搜集了下资料,可以使用一下语句查看数据库中那些表正被锁定: select request_session_id spid,OBJECT_NAME(reso ...

  4. Zend 缓存

    一. Zend Optimizer 和 Zend Guard Loader 作用和区别 两者的功能一样. Zend Optimizer 在PHP5.3以前的版本使用,解密和代码优化,提高PHP应用程序 ...

  5. day0321正则表达式

    一.正则表达式 1.定义一个规则,检测某一段字符串是否符合规则,将符合规则的字符匹配出来. 2.只和字符串相关 3.字符组 描述一个字符位置的内容 3.1    [012345]检测0,1,2,3,4 ...

  6. day 0314函数的进阶

    1.空间:内置空间,全局空间,局部空间. 内置空间:空间存放python解释器,为我们提供了方便的名字:input,print,str,list,tuple 三个空间的加载顺序: 内置空间>&g ...

  7. [filesystem][archlinux][disk encryption][btrfs] btrfs

    fork from here http://www.cnblogs.com/hugetong/p/6914248.html boot分区,MBR加密:https://wiki.archlinux.or ...

  8. Flash builder 、flash cs6、 as 3.0研究

    1.Flash/Actionscript3 载入资源文件方法考 http://zengrong.net/post/1107.htm 2.使用Flash Professional CS5和Flash B ...

  9. 转:JDBC中关于PreparedStatement.setObject的一些细节说明

    原文地址:https://blog.csdn.net/zhiyangxuzs/article/details/78657235 JDBC中PreparedStatement.setObject(ind ...

  10. Appium入门(5)__ Appium测试用例(1)

    步骤为:启动AVD.启动Appium.写用例(python).执行 一.启动Android模拟器                   二.启动Appium Server 双击appium图标启动,配置 ...