在(一)中的配置保持不变,前一篇是用crviewer标签来实现jsp显示水晶报表的
这篇文章教你如何自己写代码来享受水晶报表的
report_source.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%//Crystal Java Reporting Component (JRC) imports.%>
<%-- jrcerom.jar--%>
<%@page import="com.crystaldecisions.reports.sdk.*" %>
<%-- rascore.jar--%>
<%@page import="com.crystaldecisions.sdk.occa.report.lib.*" %>
<% //水晶报表的位置
final String REPORT_NAME = "view_report.rpt";
%>
<%
try {
//打开报表
ReportClientDocument reportClientDoc = new ReportClientDocument();
reportClientDoc.open(REPORT_NAME, 0);
//把报表源放进session,传递到报表显示页面
session.setAttribute("reportSource", reportClientDoc.getReportSource());
//转到报表显示页面
response.sendRedirect("CrystalReportViewer.jsp");
} catch(ReportSDKException ex) {
out.println(ex);
} catch(Exception ex) {
out.println(ex);
}
%>
上面的可以封装到javabean里面
reportClientDoc.getDatabaseController().logon(USERNAME, PASSWORD);
设置数据库的登陆用户,如果浏览这个报表的用户需要设置不同的权限的话,那就需要设置上面这个了
CrystalReportViewer.jsp
<%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%>
<%//Crystal Report Viewer imports.%>
<%-- webreporting.jar--%>
<%@page import="com.crystaldecisions.report.web.viewer.*"%>
<%-- rascore.jar--%> <%@page import="com.crystaldecisions.reports.sdk.*" %>
<%
//建立一个viewer对象实例,并设置
CrystalReportViewer viewer = new CrystalReportViewer();
viewer.setOwnPage(true); viewer.setOwnForm(true);
viewer.setPrintMode(CrPrintMode.ACTIVEX);
//从session中取报表源
Object reportSource = session.getAttribute("reportSource");
viewer.setReportSource(reportSource);
//显示水晶报表
viewer.processHttpRequest(request, response,this. getServletConfig().getServletContext(), null);
//释放viewer对象
viewer.dispose();
viewer= null;
%>
第二种方法直接用一个页面
CrystalReportViewer.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%//Crystal Java Reporting Component (JRC) imports.%>
<%-- jrcerom.jar--%>
<%@page import="com.crystaldecisions.reports.sdk.*" %>
<%-- rascore.jar--%>
<%@page import="com.crystaldecisions.sdk.occa.report.lib.*" %>
<%-- webreporting.jar--%>
<%@page import="com.crystaldecisions.report.web.viewer.*"%>
<%
//水晶报表的位置
final String REPORT_NAME = "view_report.rpt";
%>
<% try {
//打开报表
ReportClientDocument reportClientDoc = new ReportClientDocument();
reportClientDoc.open(REPORT_NAME, 0);
//把报表源放进session,传递到报表显示页面
//session.setAttribute("reportSource", reportClientDoc.getReportSource());
//建立一个viewer对象实例,并设置
CrystalReportViewer viewer = new CrystalReportViewer();
viewer.setOwnPage(true);
viewer.setOwnForm(true);
viewer.setPrintMode(CrPrintMode.ACTIVEX);
//从session中取报表源
//Object reportSource = session.getAttribute("reportSource");
//viewer.setReportSource(reportSource);
viewer.setReportSource(reportClientDoc.getReportSource());
//显示水晶报表
viewer.processHttpRequest(request, response,this. getServletConfig().getServletContext(), null);
//释放viewer对象
viewer.dispose();
viewer= null;
//转到报表显示页面
//response.sendRedirect("CrystalReportViewer.jsp");
} catch(ReportSDKException ex) {
out.println(ex);
} catch(Exception ex) {
out.println(ex);
}
%>
个人感觉第一种方法好,报表源跟显示分开,安全,重用方便