Como visualizar relatorio no Cristal Reports com JSP/Serlvet

1 resposta
R

Como faço para minha aplicaçao WEB acessar relatorios feitos no Cristal Reports?

1 Resposta

S

esse codigo transforma para PDF e abre no browser o relatorio

<%@ page language="java" %>
<%@ page import="com.crystaldecisions.report.web.viewer.*" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.application.*" %>
<%@ page import="java.util.Locale" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.Locale" %>
<%@ page import="java.lang.String" %>
<%@ page import="javax.servlet.http.HttpSession" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.data.*" %>
<%@ page import="com.crystaldecisions.sdk.occa.report.exportoptions.ReportExportFormat" %>
<%@ page import="java.io.*" %>
<%@ page contentType="text/html; charset=ISO-8859-1" %>

<html>
<head>
<title>Relatorio</title>
</head>
<body>

<%
	String NomeRel = "ReportTempAmbiente.rpt";
		
	ReportClientDocument clientDoc = new ReportClientDocument();
	String path = "rassdk://C:/jakarta-tomcat-4.1.27/webapps/MTN/relatorio/temperatura/";
	ReportAppSession ra = new ReportAppSession();
	ra.createService("com.crystaldecisions.sdk.occa.report.application.ReportClientDocument");
	// Indica o servidor que está o cristal reports
	ra.setReportAppServer("127.0.0.1");
	ra.initialize();
	clientDoc.setReportAppServer(ra.getReportAppServer());
	clientDoc.open (path + NomeRel, OpenReportOptions._openAsReadOnly);
	clientDoc.refreshReportDocument();

	//Especifica o formato para a exportação
	ByteArrayInputStream byteIS = (ByteArrayInputStream) clientDoc.getPrintOutputController().export(ReportExportFormat.PDF);

	// Exporta o relatório

	//Cria um byte[] (mesmo tamanho do exportado ByteArrayInputStream)
	byte[] buf = new byte[2000 * 1024];
	int nRead = 0;

	//Set response headers to indicate pdf MIME type and inline file
	response.reset();
	response.setContentType("application/pdf");
	response.setHeader("Content-Disposition", "inline;filename=teste.pdf");

	//Envia o Byte Array para o cliente
	while ((nRead = byteIS.read(buf)) != -1) 
	{
	  response.getOutputStream().write(buf, 0, nRead);
	}

	//Flush the output stream
	response.getOutputStream().flush();
	//Close the output stream
	response.getOutputStream().close();
%>
</body>
</html>
Criado 2 de fevereiro de 2004
Ultima resposta 7 de mai. de 2004
Respostas 1
Participantes 2