`
darkma
  • 浏览: 522175 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

Java web 中报表预览及打印

阅读更多
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.fill.JRFileVirtualizer;
import net.sf.jasperreports.engine.util.JRLoader;

public class ReportPrintUtil {

private JasperPrint getJasperPrint(JasperReport jReport, Map paramMap) {
        JasperPrint jPrint = null;
        try {
        // 填充报表数据
            jPrint = JasperFillManager.fillReport(jReport, paramMap, new JREmptyDataSource());
        } catch (Exception er) {
            er.printStackTrace();
        }
        return jPrint; 
    }

/**
* 支持多报表同时预览及打印
* @param request
* @param response
* @param url 报表存储(相对)路径
* @param paramMapList 报表参数值集合
*/
public void doPrint(HttpServletRequest request, HttpServletResponse response,String url, List paramMapList){
try{
List jasperPrintList = new ArrayList();
JasperReport jReport = (JasperReport) JRLoader.loadObject(getClass().getResource(url));
for (Iterator iter = paramMapList.iterator(); iter.hasNext();) {
Map paramMap = (Map) iter.next();
jasperPrintList.add(this.getJasperPrint(jReport, paramMap));
}

// 下面是在磁盘建立目录来优化内存
Map parameters = new HashMap();
        JRFileVirtualizer virtualizer = new JRFileVirtualizer(2);
        parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);
        // 填充完毕,锁住磁盘
        virtualizer.setReadOnly(true);
       
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        JRPdfExporter exporter = new JRPdfExporter();
       
        exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
       
        exporter.exportReport();
        byte[] bytes = baos.toByteArray();
       
        // 设置报表以 pdf 格式输出
        response.setContentType("application/pdf");
        response.setContentLength(bytes.length + 10);
        ServletOutputStream ouputStream = response.getOutputStream();
        ouputStream.write(bytes, 0, bytes.length);
        ouputStream.flush();
        ouputStream.close();
}catch(Exception err){
err.printStackTrace();
}
}
}

(注:采用PDF格式打印时,需要安装相应的PDF阅读器才能进行预览。)
2
0
分享到:
评论

相关推荐

    java动态报表神器DynamicReports中文文档

    java动态报表神器DynamicReports中文文档,翻译了官方的api,有需要的小伙伴可以看看。

    Grid++Rport WEB报表插件安装包5.6.0.2

    提供独有的报表查询展示功能,让报表查询展示、打印、打印预览及数据导出等集成一体化实现。轻松实现中式表格报表、动态报表、多层表头、票据套打、交叉表、统计图表、条形码等,是中式复杂报表的最佳开发工具。提供...

    Grid++Report 报表设计器

    提供独有的报表查询显示功能,让报表查询显示、打印、打印预览及数据导出等功能集成一体化实现。轻松实现通用报表、表格报表、动态报表、多层表头、票据与发票套打、交叉表、表中表及各种特殊报表等。提供详尽帮助...

    Peach-Printer Web 打印控件

    Peach-Print是一套Web打印服务解决方案。打印后台组件基于JAVA平台;能适应各种操作系统的开发需求。支持预览、直接打印、导出PDF等功能,支持打印HTML,支持Table标签表头表尾分页;模版设计器操作简单方便,方便...

    锐浪报表Grid++Report5.3

    提供独有的报表查询显示功能,让报表查询显示、打印、打印预览及数据导出等功能集成一体化实现。轻松实现表格报表、动态报表、多层表头、票据套打、交叉表、统计图表、表中表及各种特殊报表等,是中式报表的最佳开发...

    开源报表BIRT开发手册

    3.6.3 在报表中加入交叉报表 28 3.6.4 数据准备 29 3.6.5 向交叉表插入数据 32 3.6.6 加入汇总 33 3.6.7 格式化报表 34 3.7 嵌套报表 35 3.7.1 构建数据源 36 3.7.2 构建数据集 36 3.7.3 布局嵌套报表 38 3.7.4 将...

    Crk Report 报表平台程序及功能简介

    2、Web Crk Report企业版ActiveX控件:支持打印预览、打印等功能,并提供给第三方应调用的集成接口API,支持从报表外部传入复杂的查询条件,支持.Net(ASP),J2EE(Java)、PHP、HTML等网页界面中调用,该功能需要与Crk ...

    Grid++Report5.5.0.5

    WEB报表开发适用于ASP、ASP.NET、JSP/Java、PHP等,支持所有WEB服务器与数据库。开发桌面报表与WEB报表共享相同的开发知识与资源,大大提高报表开发效率。 除了提供报表打印、打印预览、数据导出等功能,还提供独有...

    Grid++Report5.6报表开发工具

    提供独有的报表查询展示功能,让报表查询展示、打印、打印预览及数据导出等集成一体化实现。轻松实现中式表格报表、动态报表、多层表头、票据套打、交叉表、统计图表、条形码等,是中式复杂报表的最佳开发工具。提供...

    Grid++Report6 报表开发者安装包

    提供独有的报表查询显示功能,让报表查询显示、打印、打印预览及数据导出等功能集成一体化实现。轻松实现表格报表、动态报表、多层表头、票据套打、交叉表、统计图表、表中表及各种特殊报表等,是中式报表的最佳开发...

    Grid++Report5.5报表工具

    提供独有的报表查询展示功能,让报表查询展示、打印、打印预览及数据导出等集成一体化实现。轻松实现表格报表、动态报表、多层表头、票据套打、交叉表、统计图表、表中表及各种特殊报表等,是中式报表的最佳开发工具...

    Grid++Report5报表工具 版本5.5.0.8

    提供独有的报表查询展示功能,让报表查询展示、打印、打印预览及数据导出等集成一体化实现。轻松实现表格报表、动态报表、多层表头、票据套打、交叉表、统计图表、表中表及各种特殊报表等,是中式报表的最佳开发工具...

    原创:iReport&JasperReport开发手记(一) List报表开发与发布

    原创:iReport&JasperReport开发手记(一) List报表开发与发布 b/s下,List报表开发与发布

    birt2.5.2最全面的开发手册

    3.6.3 在报表中加入交叉报表 28 3.6.4 数据准备 29 3.6.5 向交叉表插入数据 32 3.6.6 加入汇总 33 3.6.7 格式化报表 34 3.7 嵌套报表 35 3.7.1 构建数据源 36 3.7.2 构建数据集 36 3.7.3 布局嵌套报表 38 3.7.4 将...

    JAVA项目开发全程实录(含电子书和所有源代码)

    《Java项目开发全程实录》这一本书从开发背景、需求分析、系统功能分析、数据库分析、数据库建模、网站开发和网站发布或者程序打包与运行,每一过程都进行了详细的介绍。 目 录 第1章 进销存管理系统(Swing+SQL ...

    List & Label试用版:一款功能强大的的报表控件

    通过List & Label报表生成器,开发人员只需添加数行代码便可在他们的程序中添加报表,子报表,简单列表,多表单,交叉表,图表,表格,标签,打印,预览,导出以及Web报表。可用于.NET、Java、Delphi、C#、C/C++、...

    SOAOFFICE - 微软 OFFICE 中间件

    6. 需要在html页面中显示复杂报表,并要求精确打印预览及打印的; 7. 需要动态生成中国式复杂格式报表的; 8. 需要在html页面中输入复杂票据的; 9. 使用COM服务器自动化技术调用Word/Excel经常产生死进程或系统不...

    java_jsp项目源码_通用的在线考试系统(+struts+hibernate+oracle)130220.rar

    同时,系统提供了试卷预览和打印功能,方便教师和学生进行考试前的准备。 4. 在线考试:系统支持实时监控考试过程,包括考生答题时间、答题进度和答题情况。考生在考试过程中可以随时保存试卷,以防意外导致的数据...

    java_jsp项目源码_通用的在线考试系统(+struts+hibernate+oracle).rar

    同时,系统提供了试卷预览和打印功能,方便教师和学生进行考试前的准备。 4. 考试管理:系统支持在线答题、考试时间控制、防作弊等多种考试模式。考生可在规定时间内完成考试,系统自动计算答题时间和得分,并生成...

Global site tag (gtag.js) - Google Analytics