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)首先系统的安全性,对于任何一个系统来说,安全 ...
随机推荐
- nowcoder 206A - Birthday - [最小费用最大流]
题目链接:https://www.nowcoder.com/acm/contest/206/A 题目描述 恬恬的生日临近了.宇扬给她准备了一个蛋糕.正如往常一样,宇扬在蛋糕上插了n支蜡烛,并把蛋糕分为 ...
- [No000011E]Python教程1/9-Python简介
Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等等. 那P ...
- 深度学习中将类别标签映射到one_hot向量
有时我们的样本标签,都是标记从0开始直至到类别的个数.在模型训练的时候,这些标签需要变成one_hot向量,这样才能够跟softmax出来的概率做互熵损失,计算loss. 那么,映射的方法如下: de ...
- express工程的优化和请求参数的处理
1.让工程自动刷新 在Express的默认工程中,ejs, jade等模板的改变会立刻被渲染到浏览器中,但是js的改变不能立即刷新.这时候我们要用到一些自动刷新工具, 如 nodemon, super ...
- Kubernetes中的nodePort,targetPort,port的区别和意义(转)
原文https://blog.csdn.net/u013760355/article/details/70162242 https://blog.csdn.net/xinghun_4/article/ ...
- [daily] docker
what docker is? https://www.docker.com/what-docker 一: archlinux 安装docker: 我之前装了一个, 然后好久没用, 今天发现不能用了, ...
- Java设计模式之模板模式及使用场景
模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框架.结构.原型.定义一个我们共同遵守的约定. 定义了模板,我们的剩余工作就是对其进行充实.丰润,完善它的不足之处. 定义模板采用抽象类 ...
- project proposal写作框架
主要有八个因素: 背景(Your Background):对于proposal有意义的要点,如国家职业证书.技能.经验.能力和实习经历等. 大纲(Outline Proposal):描述你明确的感兴趣 ...
- python脚本获取文件的创建于修改日期并计算时间差
由于在计算一个算法的运行时间的时候,需要将文件的创建日期与修改日期读取到,然后计算两者之差,在网上搜索了相关的程序之后,自己又修改了一下,把代码贴在这里,供以后查阅使用,也希望可以帮到其他人. # - ...
- Innodb buffer 相关参数
buffer相关参数: show GLOBAL VARIABLES LIKE 'innodb_buffer_pool_instances'; show GLOBAL VARIABLES LIKE 'i ...