2012-06-08 110 views
3

哪個是適當的View類來呈現現有的PDF? AbstractView?Spring MVC以PDF格式作爲視圖

我通過web服務獲取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的在finally塊。