简单的表示一下:
方法中 传入参数HttpServletRequest request, HttpServletResponse response。
//模板路径 String source = pdfTemplateBase + "/reportRecodeItem.jasper"; List<Object> listOb = new ArrayList<Object>(); //map中装载 模板中的 Fields Map<String,Object> map = new HashMap<String,Object>(); listOb.add(map);//装载数据 //准备数据 JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(listOb); InputStream inputeStream = new FileInputStream(new File(source)); //调用接口,得到生成后的 pdf 字节数组 byte[] exportReportToPdf = JasperRunManager.runReportToPdf(inputeStream, new HashMap(), dataSource); //文件名 根据请求浏览器,对应不同字符集 String filename = "检查记录表"+DateUtils.getCurrentDateString()+".pdf"; if ((request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) || (request.getHeader("User-Agent").contains("Trident"))) { System.out.println("IE"); filename = URLEncoder.encode(filename, "UTF-8"); } else { System.out.println("非IE"); filename = new String(filename.getBytes("UTF-8"), "ISO8859-1"); } response.setHeader("Content-Disposition", "inline;filename="+filename); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); toClient.write(exportReportToPdf); toClient.flush(); toClient.close();
发现大部分的做法都是 本地生成一个文件,然后再读取文件或者传一个生成的路径,感觉没有必要。
下载功能,直接返回文件流,服务器本地不会生成文件(主要还是因为自己的强迫症,不想在服务器生成不需要的文件)