Instalar o Crystal Reports 9.
Instalar o Crystal Enterprise 9.
Dentro de tomcat\webapps\root\web-inf criar uma pasta chamada lib.
Copiar para dentro dessa pasta as classes do Crystal que estão em Arquivos de Programas\Arquivos Comuns\Crystal Decisions\2.0\jars.
Copiar o diretório crystalreportsviewers que está em Arquivos de Programas\Arquivos Comuns\Crystal Decisions\2.0\ e colocar em tomcat\webapps\root.
Ao rodar a aplicação, caso de erro dizendo que não consegue compilar a classe jsp.
Copiar o arquivo tools.jar que está na pasta lib do jdk para a pasta tomcat\common\lib.
Quando o RAS estava iniciado dava um erro com o JBoss, era preciso iniciar primeiro o JBoss e depois o RAS.
Agora a página JSP que chama o relatório.
<%@ 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>Teste</title>
</head>
<body>
<%
String serverRas = "localhost";//nome ou ip do computador onde o RAS está instalado
String path = "rassdk://relatorio";//diretório onde estão os relatórios
String NomeRel = "relatorio.rpt";//nome do relatório
ReportClientDocument clientDoc = new ReportClientDocument();
ReportAppSession ra = new ReportAppSession();
ra.createService("com.crystaldecisions.sdk.occa.report.application.ReportClientDocument");
// Indica o servidor que está o cristal reports
ra.setReportAppServer(serverRas);
ra.initialize();
clientDoc.setReportAppServer(ra.getReportAppServer());
clientDoc.open (path + NomeRel, OpenReportOptions._openAsReadOnly);
/* //essa parte do código pode ser usada para fazer uma outra conexão com a base de dados
Table newTable = (Table)((Table)clientDoc.getDatabaseController().getDatabase().getTables().getTable(0)).clone(true);
ConnectionInfo ci = (ConnectionInfo)((Table)newTable.clone(true)).getConnectionInfo();
ci.setKind(ConnectionInfoKind.DBFile);
newTable.setConnectionInfo(ci);
newTable.setName(arquivo);
clientDoc.getDatabaseController().setTableLocation(clientDoc.getDatabaseController().getDatabase().getTables().getTable(0),newTable);
clientDoc.refreshReportDocument();
*/
/*//esse trecho é usado para inserir um valor em um campo parametrizado.
ParameterField tempParam = new ParameterField();
ParameterFieldDiscreteValue novoValorParamDiscreto = new ParameterFieldDiscreteValue();
ParameterFieldController paramController;
Fields paramCollection = clientDoc.getDataDefinition().getParameterFields();
ParameterField ParametroTexto = (ParameterField)paramCollection.getField(0);
novoValorParamDiscreto.setValue("Texo para campo do relatório parametrizado");
Field temp = (Field)paramCollection.getField(0);
temp.copyTo(tempParam,true);
tempParam.getCurrentValues().add(novoValorParamDiscreto);
paramController = clientDoc.getDataDefController().getParameterFieldController();
paramController.modify(ParametroTexto,tempParam);
*/
CrystalReportViewer viewer = new CrystalReportViewer();
viewer.setName("Crystal_Report_Viewer");
viewer.setOwnPage(true);
viewer.setBestFitPage(true);
viewer.setDisplayGroupTree(false);
viewer.setDisplayGroupTree(false);
viewer.setHasViewList(false);
viewer.setReportSource(clientDoc.getReportSource());
viewer.processHttpRequest(request, response, (getServletConfig()).getServletContext(),out);
viewer.dispose();
%>
</body>
</html>