简单的表示一下:
方法中 传入参数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();
发现大部分的做法都是 本地生成一个文件,然后再读取文件或者传一个生成的路径,感觉没有必要。
下载功能,直接返回文件流,服务器本地不会生成文件(主要还是因为自己的强迫症,不想在服务器生成不需要的文件)
本文介绍了一种不依赖本地文件生成PDF并直接通过HTTP响应流式下载的方法。该方法利用JasperReports库将数据填充到模板中生成PDF,根据用户浏览器类型调整文件名编码,并通过HttpResponse将PDF文件直接发送给客户端。

1387

被折叠的 条评论
为什么被折叠?



