实现多个不同的JSReport导出文件打包后下载

 

代码实现那最基本的实现 没有重构也没有整理成方法 主要是自己记录下思路 

 

说下思路要实现JSReport打包下载

1.需要将JSReport输出到文件中保存起来

2.将文件输出到zip流程中实现下载。

public void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {

//创建数据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.setHeader("Content-Disposition","attachment;filename=xxx.zip");
response.setContentType("APPLICATION/OCTET-STREAM");
//将输出流设定为 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();

  }
posted @ 2012-08-16 12:05  詹鱼  阅读(858)  评论(0)    收藏  举报