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]
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]