Java web 中报表预览及打印

本文介绍了一个Java工具类,用于实现多个报表的同时预览与打印功能。该工具利用JasperReports库,支持通过HTTP请求和响应处理PDF格式的报表输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
}
}
}

[color=red][b](注:采用PDF格式打印时,需要安装相应的PDF阅读器才能进行预览。)[/b][/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值