很多地方有下载流,demo的写法一般是
new FileOutputStream( new File( "C:\\data\\3.pdf" )
但是这样限制了下载位置,也不灵活,修改成返回的流形式更合理,像这样
OutputStream out = new ByteArrayOutputStream();
PdfWriter mPdfWriter = PdfWriter.getInstance(document, out);
return (ByteArrayOutputStream) out;
同时需要HttpServletResponse response
@RequestMapping("/export/quotation1")
public void exportPdf1(HttpServletResponse response) throws Exception {
ByteArrayOutputStream baos = null;
OutputStream out = null;
try {
baos = PDFTemplateUtil.createPDFByByte(data, "pdf测试模板.ftl");
// 设置响应消息头,告诉浏览器当前响应是一个下载文件
response.setContentType("application/x-msdownload");
// 告诉浏览器,当前响应数据要求用户干预保存到文件中,以及文件名是什么 如果文件名有中文,必须URL编码
String fileName = URLEncoder.encode("月度报告.pdf", "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
out = response.getOutputStream();
baos.writeTo(out);
baos.close();
} catch (Exception e) {
e.printStackTrace();
throw new Exception("导出失败:" + e.getMessage());
} finally {
if (baos != null) {
baos.close();
}
if (out != null) {
out.close();
}
}
}
本文介绍了一种改进的PDF导出方法,通过使用ByteArrayOutputStream实现更灵活的PDF文件生成与下载,避免了固定路径的限制,并通过HTTP响应头设置使浏览器能够正确处理并下载文件。
5252

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



