创建一个 pdf Jasper 报告,终止服务器执行

Creating a pdf Jasper Report, terminates the server execution

我刚刚在 tomcat 7 上实施了一个 Jasper 报告,以从 java 网络应用程序 运行 生成一个 pdf 文档,但是当在我的电脑上生成报告时,出现 java 图标 (img1.png) 如果我关闭 "java application" 它会停止我的 tomcat 服务器和我的 web 应用程序的执行,这是我的 pdf 生成器方法的代码:

.xhtml 按钮:

<h:form>
     <h:commandButton actionListener="#{menuController.jasperTestOne}" value="Jasper PDF" />
 </h:form>

后端java代码:

public void jasperTestOne() {
        try {
            Map<String,Object> parametros= new HashMap<String,Object>();
            parametros.put("PRINT_BY", "SomeUser");

            String jPath = "/Users/Documents/pdf/jasper/test.jasper";
            File jasper = new File(jPath);
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasper.getPath(),parametros, new JRBeanCollectionDataSource(this.getItems()));

            HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
            response.addHeader("Content-disposition","attachment; filename=jsfReporte.pdf");
            ServletOutputStream stream = response.getOutputStream();

            JasperExportManager.exportReportToPdfStream(jasperPrint, stream);

            stream.flush();
            stream.close();
            FacesContext.getCurrentInstance().responseComplete();
        } catch(Exception ex) {
            System.out.println("JASPER ERROR: " + ex.getMessage());
        }
    }

"java application" 是 Tomcat 进程。 OSX 开始在 dock 中显示一个图标,因为 JasperReports 在生成报告时使用一些图形资源来测量文本。

创建 PDF 不会终止服务器进程,该进程会在您从停靠栏关闭应用程序时终止。如果您将应用程序留在停靠栏 Tomcat 将继续 运行。

如果您不想在停靠栏中看到 Tomcat 进程,您可以将 -Djava.awt.headless=true 添加到 Tomcat Java 选项。