2012-06-08 5 views
3

Каков подходящий класс View для рендеринга существующего PDF? AbstractView?Spring MVC, чтобы открыть PDF как вид

Я извлекаю PDF через веб-сервис, поэтому я не ищу подкласс AbstractPdfView для рендеринга PDF.

Я хотел бы остаться с классами контроллера Spring, которые возвращают ModelAndView, что означает запись моего собственного подкласса AbstractView, чтобы просто написать PDF в ServletOutputStream. Любая другая встроенная поддержка доступна в Spring MVC?

Благодаря

+0

Мой плохой ... я не видел, чтобы вы не хотели расширять 'AbstractPdfView': S. Я согласен с @Biju Kunjummen, вы можете просто написать его в ответ – Dani

ответ

1

Я думаю, что лучший способ это просто поток его с помощью HttpServletResponse:

OutputStream out = response.getOutputStream(); 

out.write(..); //buffer and write.. 
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); 
      } 

     } 


    } 

Надеюсь, это вам поможет. Приветствия.

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 в конце концов блока.