Ireport

3 respostas
D

Boa tarde pessoal.

Fiz um programa em java aqui na empresa para cadastro e consulta no banco de dados. A parte de cadastro e consulta pelo formulario está funcionando de boa. Agora tenho que fazer imprimir dados do cliente em um relatorio jasper. Quando clico no botão consultar o programa está consultando de boa, agora fiz um botão imprimir e tenho que adicionar um método nesse botão que chama a classe de conexão do relatorio. Como faço esse método pra chamar o relatorio?

flw

3 Respostas

fpavao

Depende… a aplicação é web ???

insonix

Se for pela web com servlet pode fazer conforme abaixo.
Ignorem a construção, pois isso tirei aqui de um projeto antigo que fizeram essa classe ridicularmente encapsulada.
Podes fazer um método disso passando oque precisa como parametro (parameters, connection, response)

private void fazGerarPDF() {
		try {
			String relatorio = null;
			relatorio = this.getArquivoJasper().trim();
			Connection connection = this.conn;

			File reportFile = new File(this.request.getRealPath(relatorio));

			Map parameters = this.parametros;

			byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, connection);

			this.response.setContentType("application/pdf");
			this.response.setHeader("Content-Disposition", "attachment; filename=" + this.nomeArquivoGerarSemExtensao.trim() + ".pdf");
			this.response.setHeader("Cache-Control", "false");

			this.response.setContentLength(bytes.length);
			ServletOutputStream ouputStream = this.response.getOutputStream();

			ouputStream.write(bytes, 0, bytes.length);
			ouputStream.flush();
			ouputStream.close();

		} catch (Exception erro) {
			erro.printStackTrace();
		}
	}

Valeu!

rollei
public class GeraRelatorio extends HttpServlet{

	private static final long serialVersionUID = -433379001619945275L;

	@SuppressWarnings("unchecked")
	protected void service(HttpServletRequest req, HttpServletResponse res)
	throws ServletException, IOException {
		
		JasperReport jasperReport = null;
		byte[] pdfRelatorio = null;
		Connection connection = null;
		
		DBConnect dbConnect = null; //DBConnect implementa a conexao com o banco de dados
		try {
			dbConnect = new DBConnect(); // o construtor retorna uma conexao para o banco
		} catch (SQLException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		} catch (InstantiationException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		} catch (IllegalAccessException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		} catch (ClassNotFoundException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		connection = dbConnect.getConnection();
		
		String pathJasper = getServletContext().getRealPath("/caminhoParaJasperDoRelatorio/") + "/";
		String pathImages = getServletContext().getRealPath("/caminhoParaImagensDoRelatorio/") + "/";
		
		Map parametros = new HashMap();
		parametros.put("IMAGES_URI"              , pathImages);
                parametros.put("SUBREPORT_DIR"           , pathJasper);
		
		try {
			jasperReport = (JasperReport) JRLoader.loadObject(pathJasper+"Relatorio.jasper");
			pdfRelatorio = JasperRunManager.runReportToPdf(jasperReport, parametros, connection);
		} catch (JRException e1) {
			e1.printStackTrace();
		}
		
		//Parametros para nao fazer cache e o que será exibido..  
		res.setContentType("application/pdf");  
		res.setHeader("Cache-Control", "no-store");  
		res.setHeader("Pragma", "no-cache");  
		res.setDateHeader("Expires", 0);  
		           
		//Envia para o navegador o pdf..  
		ServletOutputStream servletOutputStream = res.getOutputStream();  
		servletOutputStream.write(pdfRelatorio);  
		servletOutputStream.flush();  
		servletOutputStream.close();
	}
}

a classe acima eh um exemplo que apenas exibe o relatorio na tela. ele nao salva o pdf.

public class GeraRelatorio2 extends HttpServlet {
	
	private static final long serialVersionUID = 42203657584556370L;

	@SuppressWarnings("unchecked")
	protected void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
			
		Connection connection = null;
		
		DBConnect dbConnect = null; //DBConnect implementa a conexao com o banco de dados
		try {
			dbConnect = new DBConnect(); // o construtor retorna uma conexao para o banco
		} catch (SQLException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		} catch (InstantiationException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		} catch (IllegalAccessException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		} catch (ClassNotFoundException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		connection = dbConnect.getConnection();

		String pathJasper = getServletContext().getRealPath("/caminhoParaJasperDoRelatorio/") + "/";
		String pathImages = getServletContext().getRealPath("/caminhoParaImagensDoRelatorio/") + "/";

		String path = getServletContext().getRealPath("/");
		Map parametros = new HashMap();

		parametros.put("SUBREPORT_DIR", pathJasper);
		parametros.put("IMAGES_URI", pathJasper);

		try {

			JasperPrint impressao = JasperFillManager.fillReport(pathJasper +
					"/Relatorio.jasper", parametros, connection);

			JasperExportManager.exportReportToPdfFile(impressao,
					path + "/caminho/Relatorio.pdf");

			res.sendRedirect("Relatorio.pdf");

		} catch (Exception e) {
			res.getWriter().println("Erro ao gerar o relatorio: " + e);
		}
	}
}

a classe acima salva o pdf no hd e redireciona para ele

Criado 18 de abril de 2008
Ultima resposta 18 de abr. de 2008
Respostas 3
Participantes 4