哪个是呈现现有 PDF 的合适视图类?抽象视图?
我正在通过网络服务获取 PDF,所以我不希望继承 AbstractPdfView 来呈现 PDF。
我想保留返回 ModelAndView 的 Spring 控制器类,这意味着编写我自己的 AbstractView 子类来将 PDF 写入 ServletOutputStream。Spring MVC 中提供的任何其他内置支持?
谢谢
哪个是呈现现有 PDF 的合适视图类?抽象视图?
我正在通过网络服务获取 PDF,所以我不希望继承 AbstractPdfView 来呈现 PDF。
我想保留返回 ModelAndView 的 Spring 控制器类,这意味着编写我自己的 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 在浏览器新窗口中显示存储在网络服务器上的 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 块中的答案。