实现多个不同的JSReport导出文件打包后下载
说下思路要实现JSReport打包下载
1.需要将JSReport输出到文件中保存起来
2.将文件输出到zip流程中实现下载。
//创建数据Map rs = new HashMap(); rs.put("title", "标题");
List list = new ArrayList();
list.add(rs);
//表报数据源
JRDataSource ds = new JRMapCollectionDataSource(list);
//报表文件地址
String reportPath = "D:\jkd.jasper";
// 报表参数
Map params = new HashMap();
//报表
JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath,params, ds);
//打印列表(一次可以打印多个类型报表)
List jasperPrintList = new ArrayList();
jasperPrintList.add(doPrintJkd(ds));
//将表报保存到文件
File[] files = new File[2];
files[0]= new File("文件1.xls");
FileOutputStream fos1= new FileOutputStream(files[0]);JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST,jasperPrintList);
//将表报写入文件
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,fos1);
files[1]= new File("文件2.doc");
FileOutputStream fos2= new FileOutputStream(files[2]);
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST,jasperPrintList);
//将第二份表报写入文件
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,fos2);
//创建zip输出流
//将输出流设定为 response
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
//将文件放入Zip流
for (File f:files) {
zos.putNextEntry(new ZipEntry(f.getName()));
FileInputStream fis = new FileInputStream(f);
byte[] buffer = new byte[1024];
int r = 0;
while ((r = fis.read(buffer)) != -1) {
zos.write(buffer, 0, r);
}
fis.close();
}
zos.flush();
zos.close();
}

浙公网安备 33010602011771号