哪個是適當的View類來呈現現有的PDF? AbstractView?Spring MVC以PDF格式作爲視圖
我通過web服務獲取PDF,所以我不想要子類AbstractPdfView來呈現PDF。
我想繼續使用Spring控制器類,它返回一個ModelAndView,這意味着編寫我自己的AbstractView的子類來將PDF寫入ServletOutputStream。 Spring MVC中的其他內置支持?
感謝
哪個是適當的View類來呈現現有的PDF? AbstractView?Spring MVC以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);
}
}
}
希望這可以幫助你。乾杯。
沒有這樣的課。
您必須手動寫入該文件。 請看這裏回答: 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塊。
我的壞...我沒見過你不想擴展'AbstractPdfView':S。我同意@Biju Kunjummen,你可以簡單地在回覆中寫下它 – Dani