哪个是适合呈现现有PDF的View类? AbstractView?
我通过网络服务获取PDF,所以我不打算将AbstractPdfView子类化为渲染PDF。
我想继续使用返回ModelAndView的Spring控制器类,这意味着编写我自己的AbstractView子类,只是将PDF写入ServletOutputStream。 Spring MVC中还有其他内置支持吗?
由于
答案 0 :(得分:3)
我同意@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);
}
}
}
希望这会对你有所帮助。欢呼声。
答案 1 :(得分:1)
我认为最好的方法是使用HttpServletResponse简单地将其流出来:
OutputStream out = response.getOutputStream();
out.write(..); //buffer and write..
答案 2 :(得分:0)
没有这样的课程。
您必须手动编写该文件。 请在这里看到答案: Display the PDF file stored on the webserver on Browser new window using Spring MVC
我已将该代码更改为:
// 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块中。