Отчет JasperReports не появляется в приложении Spring MVC - PullRequest
0 голосов
/ 17 января 2012

Я интегрировал JasperReports в свой веб-сайт springMVC. В моей локальной системе он работал нормально, но когда я загружаю этот веб-сайт на сервер, создается отчет, но он не появляется, как в локальной системе.

Я использую iReport 4.1

Перед загрузкой сайта я также изменяю путь к отчету. Отчет создается в папке назначения, но не отображается автоматически.

Это мой код:

jasperReport = JasperCompileManager.compileReport("C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\CallCenterRev\\reports\\AttendanceReport.jrxml");
//JasperFillManager.fillReportToFile("D:\\reports\\test.jasper", jasperParameter, rsss);
jasperPrint = JasperFillManager.fillReport(jasperReport, jasperParameter, rsss);
//JasperPrintManager.printReport(jasperPrint,true);

JasperExportManager.exportReportToPdfFile(jasperPrint, "C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\CallCenterRev\\reports\\AttendanceReport.pdf");
//        new mainpage(getTitle());

if ((new File("C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\CallCenterRev\\reports\\AttendanceReport.pdf")).exists()) {
    Process p = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\CallCenterRev\\reports\\AttendanceReport.pdf");
    p.waitFor();

Ответы [ 2 ]

1 голос
/ 17 января 2012

Во-первых, почему вы используете абсолютный путь. Я думаю, что вы должны использовать относительный путь (ServletContext.getRealPath ()).Во-вторых, что для этого кода

Process p = Runtime
       .getRuntime()
       .exec("rundll32 url.dll,FileProtocolHandler C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\CallCenterRev\\reports\\AttendanceReport.pdf");
    p.waitFor();

Он не будет отображаться в веб-браузере конечно. Для просмотра отчета в браузере напишите pdf в http servletresponse и соответственно установите заголовки http.

0 голосов
/ 19 января 2012

Если вы используете пружину 3, это может помочь

    @Controller
    @RequestMapping(value="/report")
    public class ReportsController
    {
        @RequestMapping(value="/getMyReport", method=RequestMethod.GET)
        public void runReport(@RequestParam("someParam")String someParam,@RequestParam("someOtherParam")String someOtherParam,HttpServletRequest request,HttpServletResponse response)
        {
            InputStream is = null ;
            is = request.getSession().getServletContext().getResourceAsStream("/WEB-INF/reports/myReport.jasper");
            Map paramMap = new HashMap();
            paramMap.put("someParam", someParam);
            paramMap.put("someOtherParam", someOtherParam);
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", "inline; filename=myReport.pdf");
            try {
                Connection connection =getDatabaseConnection();//let this method returns a database connection
                JasperRunManager.runReportToPdfStream(is, response.getOutputStream(), paramMap, connection);
                response.getOutputStream().flush();
                response.getOutputStream().close();
            }
            catch (Exception e)
            {
               //may be some Exception handling

            }
        }
    }
...