水晶报表的设计过程说明
(二)B/S结构部分(开发工具:JSP)
概述:水晶报表在B/S结构中可以生成两种格式的文件供IE浏缆,一种是html格式(预览状态),另一种
是pdf格式(打印状态).html格式可以方便的浏缆,但没提供打印功能.pdf格式可以方便的
浏缆,打印,但客户端必须安装"Adobe Reader5.1 "或以上版本,以便打开pdf文件.
开发环境:Windows2000,Tomcat4.0,水晶报表9.0(Crystal Reports 9 Developer Edition 和 
Crystal Enterprise 9 Report Application Server),Adobe Reader5.1
运行环境:Windows2000,IE6.0,Adobe Reader5.1
步骤: (1)新建一个文件夹做为工作目录
   如:D:\CrystalReport
(2)设置报表的工作目录
   (I)开始-->程序-->CrystalEnterprise 9-->Tools-->RAS Configuration Manager
   (II)在Report Directory中输入报表的工作目录,如:D:\CrystalReport
(3)在工作目录下建立如下结构的文件夹
d:\CrystalReport\
|
|--WEB-INF\
|--classes\
|--lib\
(4)收集所有类库
    (I)把Tomcat的类库增加到本环境中
如:拷贝C:\Program Files\Apache Tomcat 4.0\webapps\ROOT\WEB-INF\lib\到
   d:\CrystalReport\WEB-INF\lib\
    (II)把水晶报表的类库增加到本环境中
如:拷贝C:\Program Files\Common Files\Crystal Decisions\2.0\jars\到
   d:\CrystalReport\WEB-INF\lib\
(5)增加水晶报表所要用到的文件
   如:拷贝C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers到
d:\CrystalReport\crystalreportviewers
(6)制作报表并把它存在工作目录下,如:d:\CrystalReport\SimpleReport.rpt
(7)编写jsp程序并把它存在工作目录下,如:d:\CrystalReport\Report_html.jsp(代码请参考我提供的例子)
   例:(I)html格式(预览状态)
主程序:Report_html.jsp
============================Report_html.jsp=========================
<%@ page import="com.crystaldecisions.sdk.occa.report.application.*,
    com.crystaldecisions.sdk.occa.report.data.*,
   com.crystaldecisions.sdk.occa.report.lib.*,
  com.crystaldecisions.report.web.viewer.*"
%>
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>Simple Preview Report</title>
</head>
<body>
<%
String reportName ="SimpleReport.rpt";
%>
<%@ include file="AlwaysRequiredSteps.jsp" %>//调用公用步骤模块
<%@ include file="CrystalReportsInteractiveViewer.jsp" %>//调用预览模块
</body>
</html>
==========================End Report_html.jsp=======================
公用步骤模块:AlwaysRequiredSteps.jsp
======================AlwaysRequiredSteps.jsp=======================
<%
/*CREATE THE REPORT APPLICATION SESSION, SET THE REPORT APP SERVER AND OPEN THE REPORT*/

String temp1 = (request.getRequestURI()).replace('/', '\\');
int lastTemp=temp1.lastIndexOf("\\");
temp1=temp1.substring(1,temp1.length());
String path = request.getRealPath("/");     
ReportAppSession ra = new ReportAppSession(); ra.createService("com.crystaldecisions.sdk.occa.report.application.ReportClientDocument");
ra.setReportAppServer("127.0.0.1");
ra.initialize();
ReportClientDocument clientDoc = new ReportClientDocument();
clientDoc.setReportAppServer(ra.getReportAppServer() );
clientDoc.open(path + reportName, OpenReportOptions._openAsReadOnly);
%>
===================End AlwaysRequiredSteps.jsp =====================
预览模块:CrystalReportsInteractiveViewer.jsp
==================CrystalReportsInteractiveViewer.jsp================
%
/*INSTANTIATE THE VIEWER AND DISPLAY THE REPORT THROUGH THE INTERACTIVE VIEWER*/

CrystalReportInteractiveViewer viewer = new CrystalReportInteractiveViewer();
viewer.setName("Crystal_Report_Interactive_Viewer");
viewer.setReportSource(clientDoc.getReportSource());
viewer.processHttpRequest(request, response, getServletConfig().getServletContext(), out);
viewer.dispose(); 
%>
===============End CrystalReportsInteractiveViewer.jsp================
(II)pdf格式(打印状态)

主程序:Report_pdf.jsp
============================Report_pdf.jsp=========================
<%@ page import="com.crystaldecisions.sdk.occa.report.application.*,
  com.crystaldecisions.sdk.occa.report.data.*,
   com.crystaldecisions.sdk.occa.report.lib.*,
  com.crystaldecisions.sdk.occa.report.exportoptions.*,java.io.*"
%>
<%@ page contentType="application/PDF" %>
<%
/*WORKING WITH THE REPORT APPLICATION SERVER AND JSP TO EXPORT A REPORT TO THE BROWSER*/
String reportName ="SimpleReport.rpt";
%>
<%@ include file="AlwaysRequiredSteps.jsp"%>//调用公用步骤模块
<%
ByteArrayInputStream byteIS = (ByteArrayInputStream)clientDoc.getPrintOutputController().export(ReportExportFormat.PDF);
byte[] buf = new byte[2000 * 1024];
int nRead = 0;
while ((nRead = byteIS.read(buf)) != -1) {
   response.getOutputStream().write(buf, 0, nRead);
}
response.getOutputStream().flush();
response.getOutputStream().close();
%> 最后形成的目录结构如下:
d:\CrystalReport\
|
|--crystalreportviewers\
|--WEB-INF\
| |--classes\
| |--lib\
|--Report_html.jsp
|--Report_pdf.jsp
|--AlwaysRequiredSteps.jsp
|--CrystalReportsInteractiveViewer.jsp
|--SimpleReport.rpt发布:(1)在服务器上安装必要的软件
Windows2000,Tomcat4.0,水晶报表9.0(Crystal Enterprise 9 Report Application Server),Adobe Reader5.1
     (2)备份Tomcat目录下的ROOT
     (3)把你工作目录下的所有文件拷贝到ROOT目录下
     (4)运行Tomcat
     (5)打开IE,在地址栏中输入"http://127.0.0.1:8080"
                                 竹舟