java與水晶報(bào)表結(jié)合_第1頁
java與水晶報(bào)表結(jié)合_第2頁
java與水晶報(bào)表結(jié)合_第3頁
java與水晶報(bào)表結(jié)合_第4頁
java與水晶報(bào)表結(jié)合_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、使用eclipse在jsp上顯示水晶報(bào)表(轉(zhuǎn))  2008-09-10 20:23:32|  分類: Java |  標(biāo)簽: |舉報(bào) |字號(hào)大中小 訂閱 我使用的開發(fā)IDE是eclipse3.2,服務(wù)器是tomcat5.5新建一個(gè) Crystal reports web項(xiàng)目在Target runtime選擇apache tomcat v5.5下一步中crystal reports java reporting component、dynamic web module、java是默認(rèn)選中的,這三個(gè)是必需的,你也可添加strut

2、s,后面的設(shè)置會(huì)要求你添加struts的類庫。在最后面默認(rèn)加入示例的數(shù)據(jù)庫和報(bào)表。這樣一個(gè)Crystal Reports web項(xiàng)目就建立了(上面的步驟應(yīng)該是地球人都可以完成吧)在里面有個(gè)CrystalReport1.rpt和CrystalReport_viewer.jsp右鍵CrystalReport_viewer.jsp>運(yùn)行方式->Run on Server,點(diǎn)擊完成。你應(yīng)該就可以看到一個(gè)空的水晶報(bào)表了吧(為什么空的,當(dāng)然啦,CrystalReport1.rpt本身是空的)在看看sample reports文件夾里面,有4個(gè)示例的.rpt報(bào)表文件,右擊其中任何一個(gè),選中Cry

3、stal Reports創(chuàng)建查看器JSP,就會(huì)創(chuàng)建一個(gè)*viewer.jsp文件。運(yùn)行這個(gè)文件,你應(yīng)該可以看到一個(gè)水晶報(bào)表了吧。我想這對(duì)大部分人應(yīng)該都是沒有問題的,剩下的事情就是好好分析這個(gè)項(xiàng)目里面所有的東東了-上面什么東西是在任何項(xiàng)目中實(shí)現(xiàn)都必須的呢?為此我特意建立一個(gè)新的tomcat項(xiàng)目,最好建一個(gè)簡(jiǎn)單的jsp頁面測(cè)試下你的tomcat項(xiàng)目是否可以正常運(yùn)行.通過本人的實(shí)驗(yàn),在其他項(xiàng)目中JSP運(yùn)行水晶報(bào)表的話,需要的類文件跟配置.1. 添加一個(gè)用戶庫如 CrystalReports Libraries,把下面的*.jar添加進(jìn)去commons-collections-3.1.jar,comm

4、ons-configuration-1.2.jar,commons-lang-2.1.jar,commons-logging.jar,Concurrent.jar,CrystalCharting.jarCrystalCommon.jarCrystalContentModels.jarCrystalDatabaseConnectors.jarCrystalExporters.jarCrystalExportingBase.jarCrystalFormulas.jarCrystalQueryEngine.jarCrystalReportEngine.jarCrystalReportingCommo

5、n.jarderby.jaricu4j.jarjrcadapter.jarjrcerom.jarkeycodeDecoder.jarlog4j.jarMetafileRenderer.jarmsbase.jarmssqlserver.jarmsutil.jarrasapp.jarrascore.jarReportPrinter.jarrpoifs.jarserialization.jarURIUtil.jarwebreporting.jarwebreporting-jsf.jarxercesImpl.jarxml-apis.jarXtreme.jar(總共36個(gè)jar,里面有一些在其他的庫已經(jīng)

6、有的了,在項(xiàng)目中添加這個(gè)自定義庫就行了)2. 把上個(gè)例子中的crystalreportviewers文件夾放在WEB-INF文件夾同一目錄下。這個(gè)就是你能看到水晶報(bào)表的基本框架,相當(dāng)于.net里面的水晶報(bào)表控件了的源代碼了。3. 把crystal-tags-reportviewer.tld放在WEB-INF下,主要標(biāo)簽4. web.xml 在<web-app>中間添加,主要是讀入crystalreportviewers    <context-param>    <param-name

7、>crystal_image_uri</param-name>    <param-value>crystalreportviewers</param-value>    </context-param>    <context-param>        <param-name>crystal_image_use_re

8、lative</param-name>        <param-value>webapp</param-value>    </context-param>5. 把CRConfig.xml放在src文件夾下,水晶報(bào)表的配置文件,如果你有注冊(cè),注冊(cè)碼也會(huì)在這文件里面CRConfig.xml<?xml version="1.0" encoding="UTF-8"?><Cr

9、ystalReportEngine-configuration>    <reportlocation>./.</reportlocation>    <timeout>0</timeout>    <ExternalFunctionLibraryClassNames>     <classname/>    </

10、ExternalFunctionLibraryClassNames></CrystalReportEngine-configuration>配置超時(shí)間隔利用 CRConfig.xml 文件,您可以配置確定何時(shí)丟棄不活動(dòng)報(bào)表源的超時(shí)間隔(以分鐘為單位)。這是必要的,因?yàn)椴换顒?dòng)報(bào)表源仍然會(huì)消耗系統(tǒng)資源(如數(shù)據(jù)庫連接、服務(wù)器內(nèi)存以及臨時(shí)文件使用的磁盤空間)。可以通過在 CRConfig.xml 文件中設(shè)置 timeout 標(biāo)記的值來指定超時(shí)間隔。默認(rèn)情況下,超時(shí)間隔為 10 分鐘。通過將該值設(shè)置為 0,可以將 Java Reporting Component 配置為沒有超時(shí)。超時(shí)間

11、隔僅適用于不活動(dòng)報(bào)表 - 正在處理的報(bào)表不會(huì)因超出此值而超時(shí)。每次成功完成一個(gè)報(bào)表源請(qǐng)求時(shí),超時(shí)定時(shí)器將會(huì)重置。如果在超時(shí)間隔內(nèi)沒有使用某個(gè)報(bào)表源,則會(huì)丟棄該報(bào)表源,并將其資源提供給其他進(jìn)程使用。6.   在jsp頁面插入這段代碼<% taglib uri="/crystal-tags-reportviewer.tld" prefix="crviewer" %><crviewer:viewer reportSourceType="reportingComponent" viewerName=&qu

12、ot;rcname-viewer" reportSourceVar="rcname" isOwnPage="true"><crviewer:report reportName="rcname.rpt" /></crviewer:viewer>感覺像在用.net里面的水晶報(bào)表控件一樣,不只viewer,連partviewer也可以的.在(一)中的配置保持不變,前一篇是用crviewer標(biāo)簽來實(shí)現(xiàn)jsp顯示水晶報(bào)表的這篇文章教你如何自己寫代碼來享受水晶報(bào)表的report_source.jsp<

13、%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.crystalde

14、cisions.sdk.occa.report.lib.*" %><%/水晶報(bào)表的位置final String REPORT_NAME = "view_report.rpt"%><%try .        /打開報(bào)表     ReportClientDocument reportClientDoc = new ReportClientDocument();     reportCl

15、ientDoc.open(REPORT_NAME, 0);    /把報(bào)表源放進(jìn)session,傳遞到報(bào)表顯示頁面     session.setAttribute("reportSource", reportClientDoc.getReportSource();            /轉(zhuǎn)到報(bào)表顯示頁面     response.se

16、ndRedirect("CrystalReportViewer.jsp");        catch(ReportSDKException ex) .         out.println(ex);catch(Exception ex) .     out.println(ex);        

17、;    %>上面的可以封裝到j(luò)avabean里面reportClientDoc.getDatabaseController().logon(USERNAME, PASSWORD);設(shè)置數(shù)據(jù)庫的登陸用戶,如果瀏覽這個(gè)報(bào)表的用戶需要設(shè)置不同的權(quán)限的話,那就需要設(shè)置上面這個(gè)了CrystalReportViewer.jsp<%page contentType="text/html"%><%page pageEncoding="UTF-8"%><%/Crystal Report View

18、er imports.%><%- webreporting.jar-%><%page import="com.crystaldecisions.report.web.viewer.*"%><%- rascore.jar-%><%page import="com.crystaldecisions.reports.sdk.*" %><%/建立一個(gè)viewer對(duì)象實(shí)例,并設(shè)置CrystalReportViewer viewer = new CrystalReportViewer();viewer.se

19、tOwnPage(true);viewer.setOwnForm(true);viewer.setPrintMode(CrPrintMode.ACTIVEX);/從session中取報(bào)表源Object reportSource = session.getAttribute("reportSource");viewer.setReportSource(reportSource);/顯示水晶報(bào)表cessHttpRequest(request, response,this. getServletConfig().getServletContext(), nul

20、l); %>第二種方法直接用一個(gè)頁面CrystalReportViewer.jsp<%page contentType="text/html"%><%page pageEncoding="UTF-8"%><%/Crystal Java Reporting Component (JRC) imports.%><%- jrcerom.jar-%><%page import="com.crystaldecisions.reports.sdk.*" %><%- rasco

21、re.jar-%><%page import="com.crystaldecisions.sdk.occa.report.lib.*" %><%- webreporting.jar-%><%page import="com.crystaldecisions.report.web.viewer.*"%><%/水晶報(bào)表的位置final String REPORT_NAME = "view_report.rpt"%><%try .    &#

22、160;   /打開報(bào)表     ReportClientDocument reportClientDoc = new ReportClientDocument();     reportClientDoc.open(REPORT_NAME, 0);    /把報(bào)表源放進(jìn)session,傳遞到報(bào)表顯示頁面    /session.setAttribute("reportSource",

23、reportClientDoc.getReportSource();    /建立一個(gè)viewer對(duì)象實(shí)例,并設(shè)置     CrystalReportViewer viewer = new CrystalReportViewer();     viewer.setOwnPage(true);     viewer.setOwnForm(true);     viewer.setPrintMode(

24、CrPrintMode.ACTIVEX);    /從session中取報(bào)表源    /Object reportSource = session.getAttribute("reportSource");    /viewer.setReportSource(reportSource);     viewer.setReportSource(reportClientDoc.getReportSource();

25、60;   /顯示水晶報(bào)表      cessHttpRequest(request, response,this. getServletConfig().getServletContext(), null);             /轉(zhuǎn)到報(bào)表顯示頁面    /response.sendRedirect("Cryst

26、alReportViewer.jsp");      catch(ReportSDKException ex) .         out.println(ex);catch(Exception ex) .     out.println(ex);            %>個(gè)人感覺

27、第一種方法好,報(bào)表源跟顯示分開,安全,重用方便在.net中,你可以很容易的用sql語句過濾報(bào)表數(shù)據(jù),但在CR4E中沒這樣的功能設(shè)定,但可以通過編寫代碼完成。這里是我做的簡(jiǎn)單用sql語句過濾數(shù)據(jù)的例子。項(xiàng)目還是用 錈嫻膖omcat項(xiàng)目。建一個(gè)實(shí)現(xiàn)這個(gè)功能的類JRC_ResultSet_DataSource.javapackage com.JRC.util;import java.sql.*;import javax.servlet.http.*;import com.crystaldecisions.reports.sdk.*;import com.crystaldecisions.sdk.oc

28、ca.report.lib.*;public class JRC_ResultSet_DataSource .    private String      REPORT_NAME=""    public JRC_ResultSet_DataSource(String report_name).        this.REPORT_NAME=report

29、_name;             /* */*      * return rEPORT_NAME     */    public String getREPORT_NAME() .        return REPORT_NAME; 

30、60;       /* */*      * param report_name 要設(shè)置的 rEPORT_NAME     */    public void setREPORT_NAME(String report_name) .         REPORT_NAME = report_name; &#

31、160;           /* */*      *    連接數(shù)據(jù)庫,通過sql查詢語句進(jìn)行查詢,返回結(jié)果集     */    private static ResultSet getResultSetFromQuery(String query, int scrollType)  

32、0;     throws SQLException, ClassNotFoundException .         Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");        final String DBUSERNAME = "username" &#

33、160;      final String DBPASSWORD = "password"        final String CONNECTION_URL = "jdbc:microsoft:sqlserver:/localhost:1433;database=dname"           

34、60;     java.sql.Connection connection = DriverManager.getConnection(CONNECTION_URL, DBUSERNAME, DBPASSWORD);          Statement statement = connection.createStatement(scrollType, ResultSet.CONCUR_READ_ONLY);     &#

35、160;          return statement.executeQuery(query);         /* */*      * 通過sql語句過濾報(bào)表數(shù)據(jù),在.net就不用怎么慘了     */    public boolean isReportSource

36、InSession(String session_name,HttpSession session) throws ReportSDKException, SQLException, ClassNotFoundException.        boolean flag=false;        try .           

37、; /打開水晶報(bào)表             ReportClientDocument reportClientDoc = new ReportClientDocument();             reportClientDoc.open(REPORT_NAME, 0);      &

38、#160;     /sql查詢語句,返回的字段數(shù)必須跟報(bào)表里面的一樣,不能多也不能少,并且字段的類型要跟報(bào)表的一樣,其他不管是什么數(shù)據(jù)都可以              /from 表這里要填完整,如數(shù)據(jù)庫名.dbo.數(shù)據(jù)庫表,最好做個(gè)別名             String query

39、 = "select tt.test_1,tt.test_2,tt.test_3,tt.test_4 from dname.dbo.test tt"                         ResultSet resultSet = this.getResultSetFromQuery(query,ResultSet.TYPE_S

40、CROLL_INSENSITIVE);                 String tableAlias = reportClientDoc.getDatabaseController().getDatabase().getTables().getTable(0).getAlias();            /把結(jié)

41、果集放進(jìn)報(bào)表里,將會(huì)自動(dòng)產(chǎn)生一個(gè)datasource             reportClientDoc.getDatabaseController().setDataSource(resultSet,tableAlias, "resultsetTable");             session.setAttribute(ses

42、sion_name, reportClientDoc.getReportSource();             flag=true;            return flag;         catch (Exception e) .   

43、         / TODO: handle exception             e.printStackTrace();            return flag;       

44、60;                      這里要注意數(shù)據(jù)庫查詢結(jié)果集的字段數(shù)目要跟報(bào)表里面的字段數(shù)目一樣,類型也要一樣,不然就會(huì)出錯(cuò)。sql語句中的表的名字要完整,如數(shù)據(jù)庫名.dbo.數(shù)據(jù)庫表,最好做個(gè)別名顯示頁面Result_viewer.jsp<%page import="com.JRC.util.JRC_ResultSet_DataSource" %>

45、<%-webreporting.jar  -%><%page import="com.crystaldecisions.report.web.viewer.*" %><%-jrcerom.jar -%><% page import="com.crystaldecisions.reports.sdk.*" %><%         JRC_ResultSet_DataSource jrcd=new JRC

46、_ResultSet_DataSource("resultSet.rpt");    if(!jrcd.isReportSourceInSession("reportSource",session)         response.sendRedirect("error.html");     CrystalReportViewer crViewer=new CrystalR

47、eportViewer();     crViewer.setOwnPage(true);     crViewer.setOwnForm(true);     crViewer.setPrintMode(CrPrintMode.ACTIVEX);         Object reportSource=session.getAttribute("reportSource");

48、     crViewer.setReportSource(reportSource);         crVcessHttpRequest(request,response,this.getServletConfig().getServletContext(),null);%>注意上面幾點(diǎn)應(yīng)該就沒問題了PS:Snippets視圖最下面有Crystal reports的一些實(shí)用代碼段CR查看器標(biāo)記、打開并查詢報(bào)表、打開報(bào)表、查看報(bào)表、查看報(bào)表并設(shè)置數(shù)

49、據(jù)庫登錄、將報(bào)表導(dǎo)出為pdf、將報(bào)表導(dǎo)出為rtf 等的代碼段,簡(jiǎn)單易用在eclipse中怎么把POJO插入到水晶報(bào)表里面呢?這就是第四篇的所要做的首先,應(yīng)該就是要建立一個(gè)實(shí)體類了。我這里用一個(gè)OrderItems.java做例子,代碼package com.JRC.beans;public class OrderItems .    public int id;                &#

50、160;                  /對(duì)應(yīng)數(shù)據(jù)庫表的id    public int quantity;                       &

51、#160;/產(chǎn)品數(shù)量,數(shù)據(jù)庫表所沒有的    public OrderItems(int id, int quantity) .        super();        this.id = id;        this.quantity = quantity;     &

52、#160;   /* */*      * return id     */    public int getId() .        return id;         /* */*      * pa

53、ram id 要設(shè)置的 id     */    public void setId(int id) .        this.id = id;         /* */*      * return quantity     */  

54、  public int getQuantity() .        return quantity;         /* */*      * param quantity 要設(shè)置的 quantity     */    public void setQuantity(int quantity) .        this.quantity = quantity;         如果你還沒建好報(bào)表,新建一個(gè)報(bào)表如Report.r

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論