Spring MVC中打开PDF作为视图(Spring MVC to open PDF as the

2019-07-29 19:57发布

这是适当的视图类,以使现有PDF? AbstractView?

我通过web服务获取PDF,所以我不希望子类AbstractPdfView渲染PDF。

我想留在春天控制器类,其返回一个ModelAndView这意味着我自己写AbstractView的子类,只写了PDF到ServletOutputStream的。 任何其他建在Spring MVC中提供支持?

谢谢

Answer 1:

我同意@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);
            }

        }


    }

希望这可以帮助你。 干杯。



Answer 2:

我认为最好的办法是简单地流出来使用HttpServletResponse的:

OutputStream out = response.getOutputStream();

out.write(..); //buffer and write..


Answer 3:

有没有这样的类。

你必须手动编写该文件。 请参阅这里回答: 显示存储在使用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块答案。



文章来源: Spring MVC to open PDF as the view
标签: spring-mvc