Abrir 2 janelas automáticas de pdf usando jasper

3 respostas
P

Tenho os seguintes códigos:

bytes = gera.geraImpressao(caminhoRelatorio + "etiquetas.jasper", new JRBeanCollectionDataSource(listaSocioPessoaRelatorio), parametros);

// PASSA O PDF COMPLETO GERADO PARA A MEMORIA
((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getSession().setAttribute("relatorioPDF", bytes);
setAbrirRelatorio(true);

<c:if test="${gerarEtiqueta.abrirRelatorio}">
                <script type="text/javascript">
                jan = window.open('gerarEtiqueta${usuarioLogin.usuario.codigo}.relatorioPDF', 'Relatório','resizable=yes,scrollbars=no,menu=no,location=no,status=yes,window=maximized');
                jan.opener = this;
               </script>
</c:if>

Isso funciona, mas agora quero que abra 2 pdfs de uma vez, em apenas um click, como por exemplo:

if (etiqueta) {
bytes = gera.geraImpressao(caminhoRelatorio + "etiquetas.jasper", new JRBeanCollectionDataSource(listaSocioPessoaRelatorio), parametros);

// PASSA O PDF COMPLETO GERADO PARA A MEMORIA
((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getSession().setAttribute("relatorioPDF", bytes);
setAbrirRelatorio(true);
}

if (relatorio) {
bytes = gera.geraImpressao(caminhoRelatorio + "relacaoAniversario.jasper", new JRBeanCollectionDataSource(listaSocioPessoaRelatorio), parametros);

// PASSA O PDF COMPLETO GERADO PARA A MEMORIA
((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getSession().setAttribute("relatorioPDF2", bytes);

setAbrirRelatorio2(true);
}

<c:if test="${gerarEtiqueta.abrirRelatorio2}">
               <script type="text/javascript">
               jan = window.open('gerarEtiqueta${usuarioLogin.usuario.codigo}.relatorioPDF2', 'Relatório','resizable=yes,scrollbars=no,menu=no,location=no,status=yes,window=maximized');
               jan.opener = this;
              </script>
</c:if>
<c:if test="${gerarEtiqueta.abrirRelatorio}">
              <script type="text/javascript">
              jan = window.open('gerarEtiqueta${usuarioLogin.usuario.codigo}.relatorioPDF', 'Relatório','resizable=yes,scrollbars=no,menu=no,location=no,status=yes,window=maximized');
              jan.opener = this;
              </script>
</c:if>

mas assim não funciona, alguém tem alguma idéia que possa me ajudar a resolver este problema?
O erro que me da é que ele não está lendo o abrirRelatorio2.

3 Respostas

P

Multiplos relatórios de pdf para simplificar!

apferreira

kra, se vc achar a solução, por favor, passa ae pra gente!

P

resolvi sim, trabalho com jsf, então:

<!-- Relatorio -->
    <servlet>
        <servlet-name>Relatorio</servlet-name>
        <servlet-class>
                br.com.inloc.relatorio.controlador.RelatorioPDFServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Relatorio</servlet-name>
        <url-pattern>*.relatorioPDF</url-pattern>
        <url-pattern>*.relatorioPDF2</url-pattern>
        <url-pattern>*.relatorioXLS</url-pattern>
    </servlet-mapping>

tinha esquecido do xml, então acrescentei mais um pattern pro novo pdf..

tenho uma classe que extende httpservlet

sobreponho doGet

protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {

        byte[] bytes;
        String aplicacao = "";

        if (arg0.getSession().getAttribute("relatorioPDF") != null) {
            bytes = (byte[]) arg0.getSession().getAttribute("relatorioPDF");
            aplicacao = "application/pdf";

        } else if (arg0.getSession().getAttribute("relatorioPDF2") != null) {
            bytes = (byte[]) arg0.getSession().getAttribute("relatorioPDF2");
            aplicacao = "application/pdf";

        } else {
            bytes = (byte[]) arg0.getSession().getAttribute("relatorioXLS");
            aplicacao = "application/vnd.ms-excel";
        }


        arg1.setContentType(aplicacao);
        arg1.addHeader("Content-Type", aplicacao);
        arg1.getOutputStream().write(bytes, 0, bytes.length);
        arg1.flushBuffer();

        if (arg0.getSession().getAttribute("relatorioPDF") != null) {
            arg0.getSession().setAttribute("relatorioPDF", null);
        } else if (arg0.getSession().getAttribute("relatorioPDF2") != null) {
            arg0.getSession().setAttribute("relatorioPDF2", null);
        }
        arg0.getSession().setAttribute("relatorioXLS", null);
    }

no jsp ficou igual o meu primeiro post, juntamente com o codigo que gera o pdf e põe na memória.

Abriu perfeitamente 2 janelas com cada pdf respectivo.

Criado 9 de junho de 2011
Ultima resposta 9 de jun. de 2011
Respostas 3
Participantes 2