JasperReport mudar nome do PDF [RESOLVIDO]

Olá amigos

gostaria de saber como mudar o nome do relatório PDF, extraindo o nome do relatório jasper.

	public static void setBytes(byte[] bytes, String mimeType) {
		
		HttpServletResponse servletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
		
		if (bytes != null && bytes.length > 0) {
			// envia o relatório em formato PDF para o browser
			servletResponse.setContentType(mimeType);
			servletResponse.setContentLength(bytes.length);
			servletResponse.setHeader("Content-disposition", "attachment; filename=\"" + nomePDF + ".pdf\"");			
			ServletOutputStream ouputStream;	
			try {
				ouputStream = servletResponse.getOutputStream();
				ouputStream.write(bytes, 0, bytes.length);
				ouputStream.flush();
				ouputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		FacesContext.getCurrentInstance().responseComplete(); 
	}

colocar na variável nomePDF o nome do relatório jasper.

ex: relproduto.jasper

  relproduto.pdf

Alguém pode ajudar?

Silvio Guedes

Olha ae:

[code] try {
RelConexao rc = new RelConexao();
rc.conexaorel(); // Faz a conex�o

            // Na variavel pathJasper ficara o caminho do diret�rio para
            // os relat�rios compilados (.jasper)
            String pathJasper = getServletContext().getRealPath("/relatorios") + "/";
            // A variavel path armazena o caminho real para o contexto
            // isso � util pois o seu web container pode estar instalado em lugares
            // diferentes
            String path = getServletContext().getRealPath("/");
            // Parametros do relatorio

            Map parametros = new HashMap();
            // O �nico parametro que devemos passar � o PathRelAutores
            // � o caminho pro RelAutores.jasper (que foi subtituido pelo
            // valor fixo �D:/iReport-0.4.0/RelAutores.jasper�)
            parametros.put("", pathJasper + "Nome_Relatorio.jasper");
          
            try {
                // Aqui ele cria o relat�rio
                JasperPrint impressao = JasperFillManager.fillReport(
                        pathJasper + "Nome_Relatorio.jasper", parametros, conexao);
                // Grava o relat�rio em disco em pdf
                JasperManager.printReportToPdfFile(impressao, path + "Nome_Relatorio.pdf");
                // Redireciona para o pdf gerado
                response.sendRedirect("Nome_Relatorio.pdf");
            } catch (Exception e) {
                response.getWriter().println("Erro ao gerar o relatório: " + e);
                System.out.print("Erro ao gerar o relatório: " + e);
            }
        } catch (Exception e) {
            System.out.println("Erro: " + e);
        }
    }[/code]

você vai ter que passar para o método setBytes o nome do arquivo.

Mostre-nos como você faz para criar o pdf (o momento que você indica o .jasper para gerá-lo)

Eu fiz assim…ve se da pra ter alguma ideia

String nomeDoArquivo = "relatorio_mes.pdf"; response.setContentType("application/pdf"); response.setHeader("Content-Disposition","attachment; filename=".concat(nomeDoArquivo)); response.setContentLength(arquivo.length); ServletOutputStream sos = response.getOutputStream(); sos.write(arquivo, 0, arquivo.length); sos.flush(); sos.close();

Olá amigos

aí vai a solução com fonte:

	public static void setBytes(byte[] bytes, String mimeType, String filename) {
		
		HttpServletResponse servletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
		
		if (bytes != null && bytes.length > 0) {
			// envia o relatório em formato PDF para o browser
			servletResponse.setContentType(mimeType);
			servletResponse.setContentLength(bytes.length);
			servletResponse.setHeader("Content-disposition", "attachment; filename=\"" + filename + "\"");			
			ServletOutputStream ouputStream;	
			try {
				ouputStream = servletResponse.getOutputStream();
				ouputStream.write(bytes, 0, bytes.length);
				ouputStream.flush();
				ouputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		FacesContext.getCurrentInstance().responseComplete(); 
	}
	
	
	public static String imprimir(String pathReport) throws Exception {
		byte[] bytes = null;
			
		String url = "jdbc:postgresql://localhost/BancodeDados";
		String user = "postgres";
		String password = "xxxxxx";
		String driver = "org.postgresql.Driver";
		
		Class.forName(driver); 
		Connection conn = DriverManager.getConnection(url, user, password);
		Map<String, Object> parametros = new HashMap<String, Object>();
		URL reportURL = RelatorioMBean.class.getResource("/reports");
		String reportDir = reportURL.getFile();
		parametros.put("REPORT_PATH", reportDir);
		
		URL relatorioURL = RelatorioMBean.class.getResource(pathReport);
		
		File file = new File(relatorioURL.getFile());
	
		try {
     		JasperReport relatorioJasper = (JasperReport) JRLoader.loadObject(relatorioURL);
	     	bytes = JasperRunManager.runReportToPdf(relatorioJasper, parametros, conn);         	
	     	
		} catch (JRException e) {
			e.printStackTrace();
		} finally{
			conn.close();
		}
		
		setBytes(bytes, "application/pdf", file.getName().replace(".jasper", ".pdf"));
		return null;
	}	

Com a ajuda do meu amigo Bruno Coitinho resolvemos o probrlema.

Muito Obrigado

Silvio Guedes