`
bean-woo
  • 浏览: 134185 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

iReport,jasperReport报表打印

阅读更多

package com.appdev.bsf.server.servlet;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRAbstractExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
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.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRRtfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.util.JRLoader;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.appdev.bsf.common.client.datasource.DictionaryGwtRpcService;

@SuppressWarnings("serial")
public class ReportServlet extends HttpServlet {
    private DictionaryGwtRpcService service;

    @Override
    public void init() throws ServletException {
        ServletContext application;
        WebApplicationContext wac;
        application = getServletContext();
        wac = WebApplicationContextUtils.getWebApplicationContext(application);
        service = (DictionaryGwtRpcService) wac.getBean("dictionaryGwtRpcServiceImpl");
    }

    @SuppressWarnings("deprecation")
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        JasperReport jReport = null;
        try {
            String jasperName = "";
            Map<String, Object> filter = new HashMap<String, Object>();

            String clsUrl = request.getParameter("clsUrl");
            String type = request.getParameter("type");
            String map = request.getParameter("map");

            if (clsUrl != null && !"".equals(clsUrl)) {
                String[] jasperNames = clsUrl.split("\\.");
                jasperName = jasperNames[jasperNames.length - 1];
            }

            if (map != null) {
                map = map.replace("{", "").replace("}", "");
                String maps[] = map.split(",");
                for (String str : maps) {
                    String[] obj = str.split("=");
                    if (obj.length == 2) {
                        filter.put(obj[0], obj[1]);
                    }
                }
            }
            if (type == null) {
                type = "Excel";
            }

            List<?> list = service.fetch(clsUrl, filter);
            if (list.size() > 0) {

                Map<String, String> paramMap = new HashMap<String, String>();
                paramMap.put("ReportTitle", jasperName);

                String filePath = request.getRealPath("/report/") + jasperName + ".jasper";
                File file = new File(filePath);
                InputStream is = new FileInputStream(file);
                JasperPrint jasperPrint = null;
                jReport = (JasperReport) JRLoader.loadObject(is);
                JRBeanCollectionDataSource jrDataSource = new JRBeanCollectionDataSource(list);

                jasperPrint = JasperFillManager.fillReport(jReport, paramMap, jrDataSource);

                OutputProcessed ouputProcessed = OutputProcessed.processOutput(type);
                JRAbstractExporter exporter = ouputProcessed.exporter;
                byte[] reportAsBytes;
                ByteArrayOutputStream baos = new ByteArrayOutputStream();

                exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
                exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);

                exporter.exportReport();

                reportAsBytes = baos.toByteArray();

                response.reset();
                // Writes the bytes[] in the response
                response.setContentType(ouputProcessed.contentType);
                response.setHeader("Content-Disposition", "inline; filename=" + jasperName
                        + ouputProcessed.fileType);
                response.setContentLength(reportAsBytes.length);

                ServletOutputStream s = response.getOutputStream();
                s.write(reportAsBytes, 0, reportAsBytes.length);

                s.flush();
                s.close();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}

class OutputProcessed {
    public JRAbstractExporter exporter;
    public String contentType;
    public String fileType;

    public static final String PDF = "PDF";
    public static final String HTML = "HTML";
    public static final String EXCEL = "Excel";
    public static final String RTF = "RTF";

    public static OutputProcessed processOutput(String output) {
        OutputProcessed result = new OutputProcessed();
        if (output.equals(PDF)) {
            result.contentType = "application/pdf";
            result.exporter = new JRPdfExporter();
            result.fileType = ".pdf";
        } else if (output.equals(HTML)) {
            result.contentType = "text/html";
            result.exporter = new JRHtmlExporter();
            result.exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
            result.fileType = ".html";
        } else if (output.equals(EXCEL)) {
            result.contentType = "application/vnd.ms-excel";
            result.exporter = new JRXlsExporter();
            result.exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
            result.exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
                    Boolean.TRUE);
            result.fileType = ".xls";
        } else {
            result.contentType = "application/rtf";
            result.exporter = new JRRtfExporter();
            result.fileType = ".rtf";
        }
        return result;
    }
}

分享到:
评论

相关推荐

    iReport-JasperReport 报表开发指南

    《iReport-JasperReport 报表开发指南》是一本针对初学者的专业教程,旨在帮助读者掌握使用iReport和JasperReport进行报表开发的核心技术。iReport是一款强大的设计工具,而JasperReport则是一个流行的Java报表库,...

    iReport 报表、子报表、主从报表、合计、实例解析

    iReport 报表、子报表、主从报表、合计、实例解析1....4.2.2. iReport子报表SubReport(例:批量打印报表)... 13 4.2.3. iReport table类型的表单(例:押金报表)... 21 4.2.4. Dorado7中iReport的配置... 24

    struts2+ireport+jasperreport报表设计简单示例

    使用ireport和struts2进行报表...java工程的lib里包含丰富的jar包,且很多都是从各个网站下载的最新版本,文件夹内还包含一些ireport和jasperreport文档,适合刚入门学习报表的作参考。没分了,收个友情分1分,勿怪。

    MyEclipse iReport JasperReport Struts2.doc

    iReport是用于设计JasperReport报表的图形界面工具,弥补了JasperReport自身缺乏可视化设计的不足。iReport同样是开源的,版本同样为3.7.0,与JasperReport版本需保持一致,可以从JasperForge获取。 3. iReport的...

    ireport 子报表,行合并实例

    IReport和JasperReport是两个非常流行的Java报表工具,它们能够帮助开发者创建复杂、美观且功能丰富的报表。本篇将深入探讨如何利用IReport来实现子报表以及行合并的实例。 首先,IReport是一款基于GUI的报表设计...

    jasperreport ireport开发java报表入门级教程(完整版).rar

    JasperReport是一款开源的Java报表工具,它允许开发者创建复杂的打印报告,包括表格、图表、文本等元素,并能够输出为PDF、HTML、Excel、CSV等多种格式。JasperReport的核心功能是设计和生成静态报表,而动态数据的...

    ireport+jasperreport联合开发java报表(PDF).rar

    《ireport+jasperreport联合开发Java报表》是针对Java开发者的一款强大的报表生成工具,它能够帮助程序员高效地创建、设计和导出各种复杂的业务报表,尤其是PDF格式的报表。本资料详细介绍了如何利用ireport和...

    JasperReport+iReport报表开发手册.pdf

    ### JasperReport+iReport 报表开发手册核心知识点详解 #### 一、JasperReport与iReport概述 **JasperReport** 是一款强大的、灵活的报表生成工具,它能够展示丰富的页面内容,并支持将这些内容转换为PDF、HTML或...

    ireport+jasperreport开发中问题解决方案

    5. **报表打印方向**:报表的打印方向可以在报表设计中设置,通常是在“打印设置”中选择横向或纵向。 6. **分组和排序**:为了组织数据,可以创建报表分组。例如,对于部门和员工的一对多关系,可以基于部门字段...

    JasperReport+iReport报表开发手册.zip

    它有一个相关的开源工程--IReport,这是一个图形化的辅 助工具,主要用于数据报表设计。JasperReports 完全是由 Java 写成,可以应用于 Java 的应用 程序,包括 J2EE,Web 应用程序中生成动态内容,它主要目的是辅助...

    SpringBoot+iReport打印(单张和多张)报表(包含模设计板样板与代码实现)案例

    本案例是SpringBoot结合iReport做的打印,直接在浏览器上面显示PDF,建议在Eclipse+Maven上部署运行,启动方式与SpringBoot启动方式一样,特别注意:如果你使用的SpringBoot版本比较新,相关jar包会有所不同。

    struts2+Ireport+Jasperreport实现报表导出

    Struts2、iReport与JasperReport是Java开发中用于构建高效、动态Web应用程序和报表生成的工具。在这个项目中,这些技术结合在一起,提供了一种强大的报表导出解决方案。以下是对这些关键技术及其在项目中的应用的...

    JasperReport报表设计总结

    本文主要总结了JasperReport报表设计的关键点,包括报表格式定制、数据填充以及显示或打印。 首先,报表格式的定制分为两种方式。一是编写jrxml文件,这是一种XML格式的文件,用于描述报表的布局和样式。另一种方式...

    JasperReport+iReport报表工具

    JasperReport和iReport是Java平台下用于生成报表的工具,它们在企业应用开发中扮演着重要的角色,尤其是在报表的生成、展现和打印方面。JasperReport是一种报表引擎,它能够解析.jasper文件并将其呈现到用户界面中,...

    JasperReport+iReport报表学习资料

    ### JasperReport+iReport 报表学习资料知识点梳理 #### 一、JasperReport与iReport简介 - **JasperReport**:是一款强大的报表生成工具,主要用于解析特定的`.jasper`文件并将其转换为用户友好的报表界面。该工具...

    JasperReport+iReport报表工具详细开发手册

    JasperReport和iReport是Java世界中非常流行的开源报表工具,它们被广泛用于生成复杂的业务报表和数据分析。本文将深入探讨这两个工具的核心概念、功能、使用方法以及它们在实际项目中的应用。 一、JasperReport...

    iReport&JasperReport学习教程--内含四套(PDF版)

    iReport和JasperReport是两个在Java开发领域中用于创建和设计报表的重要工具。它们主要用于生成动态、交互式的业务报表,帮助企业分析数据并作出决策。本教程将带你深入理解这两个工具的功能、用法以及如何结合使用...

    Java Jsp 调用ireport动态模板打印

    Java JSP调用iReport动态模板打印是一种在Web应用程序中实现报表打印的常见技术。iReport是一款开源的报表设计工具,它可以与Java、JSP、Servlets等进行集成,为开发者提供灵活的报表生成和打印功能。在这个场景下,...

Global site tag (gtag.js) - Google Analytics