jasperreport_ireport集成与使用
来源:互联网 发布:enum java 用法 编辑:程序博客网 时间:2024/05/20 18:54
Jasperreport是一个功能强大的报表类库,可以利用ireport设计报表的最终显示内容和页面。此文实现jasperreport与项目的集成,利用此方式在以后增加报表时,只需做二部分工作,一是通过ireport 设计报表,二是针对报表所需的参数编写jsp页面。
1 下载相关项目包
iReport-nb-3.1.3.zip
jasperreports-3.1.4-project.zip
2 把相关jar包加入web-inf的lib目录下
itext-1.3.jar
iTextAsian.jar
jasperreports-1.3.3.jar
jxl.jar
poi-3.0.1-FINAL-20070705.jar
poi-contrib-3.0.1-FINAL-20070705.jar
poi-scratchpad-3.0.1-FINAL-20070705.jar
3 编写相关servlet类
package com.web.servlet;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.shane.areaportal.web.util.ConnectionFactory;
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.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRRtfExporter;
import net.sf.jasperreports.engine.export.JRXlsAbstractExporter;
import net.sf.jasperreports.engine.export.JRXlsAbstractExporterParameter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet;
import net.sf.jasperreports.j2ee.servlets.ImageServlet;
public class IreportServlet extends BaseHttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=GBK");
ServletContext context = this.getServletConfig().getServletContext();
String type = request.getParameter("type");
JasperPrint jasperPrint = null;
JRXlsAbstractExporter xlsexporter;
JRPdfExporter pdfexporter;
JRRtfExporter rtfexporter;
List list = null;
//判断HTML格式报表
if("HTML".equals(type)||"".equals(type)||type==null) {
PrintWriter out = response.getWriter();
jasperPrint = (JasperPrint)request.getSession().getAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE);
int pageIndex = 0;
int lastPageIndex = 1;
if(jasperPrint!=null) {
list = jasperPrint.getPages();
}
if (list!= null)
{
lastPageIndex = jasperPrint.getPages().size() - 1;
}
String pageStr = request.getParameter("page");
if(pageStr!=null) {
pageIndex = Integer.parseInt(pageStr);
}
if (pageIndex < 0)
{
pageIndex = 0;
}
if (pageIndex > lastPageIndex)
{
pageIndex = lastPageIndex;
}
out.println("<html>");
out.println("<meta http-equiv='Content-Type' content='text/html; charset=gbk'>");
out.println("<head>");
out.println(" <style type='text/css'>");
out.println("*{margin:0 auto;padding:0;}");
out.println("a {text-decoration: none}");
out.println("</style>");
out.println("</head>");
out.println("<body >");
out.println("<div style='overflow-y: scroll;height:100%;text-align:center;'>");
out.println("<table width='20%' cellpadding='0' cellspacing='0' border='0' style='margin-top:12px;'>");
out.println("<tr>");
out.println("<td><a href='"+this.getServletName()+"?pag=0'><img src='./images/reload.GIF' border='0'></a></td>");
out.println("<td> </td>");
if (pageIndex > 0)
{
out.println("<td><a href='"+this.getServletName()+"?page=0'><img src='./images/first.GIF' border='0'></a></td>");
out.println("<td><a href='"+this.getServletName()+"?page="+(pageIndex-1)+"'><img src='./images/previous.GIF' border='0'></a></td>");
}else {
out.println("<td><img src='./images/first_grey.GIF' border='0'></td>");
out.println("<td><img src='./images/previous_grey.GIF' border='0'></td>");
}
String page = request.getParameter("page");
if(page!=null) {
pageIndex = Integer.parseInt(page);
}
if(pageIndex < lastPageIndex) {
out.println("<td><a href='"+this.getServletName()+"?page="+(pageIndex + 1)+"'><img src='./images/next.GIF' border='0'></a></td>");
out.println("<td><a href='"+this.getServletName()+"?page="+lastPageIndex+"'><img src='./images/last.GIF' border='0'></a></td>");
}else {
out.println("<td><img src='./images/next_grey.GIF' border='0'></td>");
out.println(" <td><img src='./images/last_grey.GIF' border='0'></td>");
}
out.println("</tr>");
out.println("</table>");
try {
if(request.getParameter("reload")!=null || jasperPrint == null) {
JasperCompileManager.compileReportToFile(context.getRealPath(this.getJrxmlPath(request)));
String reportFileName = context.getRealPath(this.getJasperPath(request));
File reportFile = new File(reportFileName);
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
Map parameters = this.getHtmlParameters(request,response);
jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ConnectionFactory.getConn());
request.getSession().setMaxInactiveInterval(240*60);
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
}
JRHtmlExporter exporter = new JRHtmlExporter();
StringBuffer sbuffer = new StringBuffer();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "image?image=");
exporter.setParameter(JRExporterParameter.PAGE_INDEX, new Integer(pageIndex));
exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER, "");
exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "");
exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER, "");
exporter.exportReport();
} catch (Exception e) {
e.printStackTrace();
}
out.println("</div>");
out.println("</body>");
out.println("</html>");
out.flush();
out.close();
}else if("PDF".equals(type)) {
try {
JasperCompileManager.compileReportToFile(context.getRealPath(this.getJrxmlPath(request)));
String reportFileName = context.getRealPath(this.getJasperPath(request));
File reportFile = new File(reportFileName);
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
Map parameters = this.getHtmlParameters(request,response);
jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ConnectionFactory.getConn());
pdfexporter = new JRPdfExporter();
pdfexporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
pdfexporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
pdfexporter.exportReport();
byte[] bytes = baos.toByteArray();
if (bytes != null && bytes.length > 0)
{
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
try
{
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
}
finally
{
if (ouputStream != null)
{
try
{
ouputStream.close();
}
catch (IOException ex)
{
}
}
}
}
}catch(Exception e) {
e.printStackTrace();
}//XLS格式报表
}else if("XLS".equals(type)) {
try {
JasperCompileManager.compileReportToFile(context.getRealPath(this.getJrxmlPath(request)));
String reportFileName = context.getRealPath(this.getJasperPath(request));
File reportFile = new File(reportFileName);
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
Map parameters = this.getHtmlParameters(request,response);
jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ConnectionFactory.getConn());
xlsexporter = new JRXlsExporter();
xlsexporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
xlsexporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
xlsexporter.setParameter(JRXlsAbstractExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
xlsexporter.setParameter(JRXlsAbstractExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
xlsexporter.exportReport();
byte[] bytes = baos.toByteArray();
if ((bytes != null) && (bytes.length > 0))
{
response.setContentType("application/xls");
response.setHeader("Content-Disposition", "inline; filename=/"file.xls/"");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
try
{
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
}
finally
{
if (ouputStream != null)
{
try
{
ouputStream.close();
}
catch (IOException ex)
{
}
}
}
}
}catch(Exception e) {
e.printStackTrace();
}//RTF格式报表
}else if("RTF".equals(type)) {
try {
JasperCompileManager.compileReportToFile(context.getRealPath(this.getJrxmlPath(request)));
String reportFileName = context.getRealPath(this.getJasperPath(request));
File reportFile = new File(reportFileName);
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
Map parameters = this.getHtmlParameters(request,response);
jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ConnectionFactory.getConn());
rtfexporter = new JRRtfExporter();
rtfexporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
rtfexporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
rtfexporter.exportReport();
byte[] bytes = baos.toByteArray();
if (bytes != null && bytes.length > 0)
{
response.setContentType("application/rtf");
response.setHeader("Content-Disposition", "inline; filename=/"file.rtf/"");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
try
{
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
}
finally
{
if (ouputStream != null)
{
try
{
ouputStream.close();
}
catch (IOException ex)
{
}
}
}
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
/**
* 获取页面参数
* @param request
* @param response
* @return
*/
protected Map getHtmlParameters(HttpServletRequest request,HttpServletResponse response) {
//从表单获取Map参数集合
Map map = request.getParameterMap();
//传入报表Map参数集合
Map parameterMap = new HashMap();
Set set = map.entrySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()) {
Map.Entry<String,String[]> entry = (Entry<String, String[]>)iterator.next();
String[] s = entry.getValue();
parameterMap.put(entry.getKey(), s[0]);
}
return parameterMap;
}
//.jrxml格式文件路径
protected String getJrxmlPath(HttpServletRequest request) {
return "/jasper/"+request.getParameter("filename")+".jrxml";
}
//.jasper格式文件路径
protected String getJasperPath(HttpServletRequest request) {
return "/jasper/"+request.getParameter("filename")+".jasper";
}
}
4 web.xml 当中加入servlet描述
<servlet-mapping>
<servlet-name>IreportServlet</servlet-name>
<url-pattern>/IreportServlet</url-pattern>
</servlet-mapping>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>IreportServlet</servlet-name> <servlet-class>com.web.servlet.IreportServlet</servlet-class>
</servlet>
5 把jasperreports-3.1.4/demo/samples/webapp下的images图片文件夹复制到项目的webroot目录里。
- jasperreport_ireport集成与使用
- VLC集成与使用
- Nexus 使用与集成
- Andfix集成与使用
- VS2005与VSS2005集成使用
- springMVC 与beanvalidate 集成使用
- Spring与MongoDB集成使用
- Maven与wtp集成使用注意事项
- 在Spring与Hibernate集成使用
- 使用sourceinsight与mingw的project集成
- Spring JDBC与IOC集成使用
- ActiveMQ与RabbitMQ使用camel集成
- Eclipse git 插件集成与本地使用
- MapReduce on HBase使用与集成
- eclipse集成git插件与本地使用
- 使用C# 与Xero OAuth 交互 集成
- FineReport 报表工具的使用与集成
- interlliJ idea 与 sonarQube 的集成使用
- eclipse下安装JS插件 ,Spket(ext)
- 郁闷
- freemarker pk velocity
- 树结构
- 验证码
- jasperreport_ireport集成与使用
- 时刻注意网络安全 教你养成安全上网新习惯
- DDoS防范和全局网络安全网络的应对
- HTTP参数中Etag的重要性
- 验证一个硬币是否是均匀的(试验次数30,显著性水平0.05)
- 查看你使用最多的10条shell命令
- .rc file
- @@IDENTITY 全局变量 返回 最后插入的标识值。
- mysql的几个实用字符串函数