使用ireport工具
SupplierCountController
/**
* 下载
*
* @param servletResponse
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void downloadSupplierResume(HttpServletResponse servletResponse, List<Map<String, Object>> dataMapList) {
if (null == dataMapList || dataMapList.isEmpty()) {
return;
}
// 模板
String classesPath = FileExportServiceImpl.class.getClassLoader().getResource("/").getPath();
// 报表report模板文件
File reportFile = new File(classesPath + "/ireport/supplierResumeReport.jrxml");
if (!reportFile.exists()) {
LOGGER.error(classesPath + "/ireport/supplierResumeReport.jrxml" + "模板文件不存在");
} else {
FileInputStream parentReportFis = null;
JasperPrint jasperPrint = null;
JasperReport jasperReport = null;
ServletOutputStream printWriter = null;
JRExporter jrExporter = null;
try {
// 根据拼装的模板文件路径读取模板文件
parentReportFis = new FileInputStream(reportFile);
// 从文件输入流中解析模板文件
jasperReport = JasperCompileManager.compileReport(parentReportFis);
String supplierName;
List<Map<String, Object>> dataList;
List<Map<String, Object>> emptyList = new ArrayList<Map<String, Object>>();
Map<String, Object> emptyMap = new HashMap<String, Object>();
emptyMap.put("resumeResult", " ");
emptyMap.put("recommendSource", " ");
emptyMap.put("sourceCode", " ");
emptyMap.put("gwName", " ");
emptyMap.put("uploadTime", " ");
emptyList.add(emptyMap);
List<JasperPrint> jpList = new ArrayList<JasperPrint>();
List<String> nameList = new ArrayList<String>();
if (dataMapList.isEmpty()) {
dataMapList.add(new HashMap<String, Object>());
}
for (Map<String, Object> tempMap : dataMapList) {
if (null == tempMap || tempMap.isEmpty()) {
continue;
} else {
supplierName = String.valueOf(tempMap.get("supplierName"));
dataList = (List<Map<String, Object>>) tempMap.get("dataList");
if (null == dataList || dataList.isEmpty()) {
dataList = emptyList;
}
// 向解析过的模板中填充数据
jasperPrint = JasperFillManager.fillReport(jasperReport, tempMap, new JRBeanCollectionDataSource(dataList));
jpList.add(jasperPrint);
nameList.add(supplierName);
}
}
// 导出excel
jrExporter = new JRXlsExporter();
// 设置导出的文件名称
jrExporter.setParameter(JRXlsExporterParameter.SHEET_NAMES, nameList.toArray(new String[nameList.size()]));
// 设置导出对象 需要到处的 已经解析过、填充过数据的模板
if (jpList.size() > 1) {
jrExporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jpList);
} else if (jpList.size() > 0) {
jrExporter.setParameter(JRExporterParameter.JASPER_PRINT, jpList.get(0));
}
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
jrExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);
jrExporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
jrExporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE); // 删除记录最下面的空行
jrExporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); //
// 删除多余的columnHeader
jrExporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); // 显示边框
jrExporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
// 初始化excel导出对象
jrExporter.exportReport();
// 设置页面不缓存
servletResponse.reset();
servletResponse.setContentType("application/ms-excel;charset=UTF-8");
servletResponse.setHeader("Content-Disposition", "attachment; filename=" + new String("供应商简历报表".getBytes("UTF-8"), "ISO-8859-1") + ".xls");
printWriter = servletResponse.getOutputStream();
byte[] bytes = oStream.toByteArray();
servletResponse.setContentLength(bytes.length);
if (bytes != null && bytes.length > 0) {
// 把生成excel临时文件从缓存中写入输出流中
printWriter.write(bytes, 0, bytes.length);
printWriter.flush();
// printWriter.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != parentReportFis) {
try {
parentReportFis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}