Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc Spring MVC打开PDF作为视图_Spring Mvc - Fatal编程技术网

Spring mvc Spring MVC打开PDF作为视图

Spring mvc Spring MVC打开PDF作为视图,spring-mvc,Spring Mvc,哪个视图类适合呈现现有PDF?抽象视图 我是通过Web服务获取PDF的,所以我不希望使用AbstractPdfView子类来呈现PDF 我想继续使用Spring控制器类,它返回ModelAndView,这意味着编写我自己的AbstractView子类,将PDF写入ServletOutputStream。Spring MVC中还有其他内置支持吗 谢谢我认为最好的方法是使用HttpServletResponse将其流式输出: OutputStream out = response.getOutput

哪个视图类适合呈现现有PDF?抽象视图

我是通过Web服务获取PDF的,所以我不希望使用AbstractPdfView子类来呈现PDF

我想继续使用Spring控制器类,它返回ModelAndView,这意味着编写我自己的AbstractView子类,将PDF写入ServletOutputStream。Spring MVC中还有其他内置支持吗


谢谢

我认为最好的方法是使用HttpServletResponse将其流式输出:

OutputStream out = response.getOutputStream();

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

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

        }


    }

希望这对你有帮助。干杯。

没有这样的课

您必须手动写入该文件。 请看这里的答案:

我已将该代码更改为:

 // 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的答案
并将输入流放入finally块。

我的坏。。。我没有看到您不想扩展
AbstractPdfView
:S。我同意@Biju Kunjummen,您只需在响应中写入即可