这是适当的视图类,以使现有PDF? AbstractView?
我通过web服务获取PDF,所以我不希望子类AbstractPdfView渲染PDF。
我想留在春天控制器类,其返回一个ModelAndView这意味着我自己写AbstractView的子类,只写了PDF到ServletOutputStream的。 任何其他建在Spring MVC中提供支持?
谢谢
这是适当的视图类,以使现有PDF? AbstractView?
我通过web服务获取PDF,所以我不希望子类AbstractPdfView渲染PDF。
我想留在春天控制器类,其返回一个ModelAndView这意味着我自己写AbstractView的子类,只写了PDF到ServletOutputStream的。 任何其他建在Spring MVC中提供支持?
谢谢
我同意@Biju Kunjummen的答案,但利用iText也将是不错的生成PDF。
这里是控制器方法的代码段。
@RequestMapping(value = "/common/reportgenerator/generatePDF")
public void generatePdf(HttpServletRequest req,HttpServletResponse res)
{
res.setContentType("text/html;charset=UTF-8");
ServletOutputStream outStream=null;
try
{
String calledFrom = req.getHeader("referer");
calledFrom=req.getRequestURL().substring(0,req.getRequestURL().lastIndexOf("/"))+"/ReportGenerator.egp";
calledFrom += "?isPdf=yes&"+req.getQueryString();
System.out.println(calledFrom+"?isPdf=yes&"+req.getQueryString());
InputStream input = new URL(calledFrom).openStream();
StringWriter writer = new StringWriter();
CopyUtils.copy(input, writer);
//System.out.println(writer.toString());
res.setContentType("application/pdf");
res.setHeader("Content-Disposition", "attachment;filename=report.pdf");
outStream = res.getOutputStream();
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(calledFrom);
renderer.layout();
renderer.createPDF(outStream);
}
catch (Exception e)
{
new AbcException(e,exceptionHandlerService);
}
finally
{
try
{
outStream.flush();
outStream.close();
}
catch(Exception ex)
{
new AbcException(ex,exceptionHandlerService);
}
}
}
希望这可以帮助你。 干杯。
我认为最好的办法是简单地流出来使用HttpServletResponse的:
OutputStream out = response.getOutputStream();
out.write(..); //buffer and write..
有没有这样的类。
你必须手动编写该文件。 请参阅这里回答: 显示存储在使用Spring MVC的浏览器的新窗口中的Web服务器的PDF文件
我已经改变了代码:
// get absolute path of the application
ServletContext context = request.getSession().getServletContext();
String appPath = context.getRealPath("/");
// construct the complete absolute path of the file
String fullPath = appPath + "WEB-INF/pdfs/201507.pdf";
此外,看到没有下载PDF格式,并把InputStream的finally块答案。