日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

水晶报表Crystal Reports实例

發(fā)布時(shí)間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 水晶报表Crystal Reports实例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.安裝

官網(wǎng)下載試用安裝工具Crystal Reports,注冊(cè)獲得試用期30天。

二.配置數(shù)據(jù)源

Crystal Reports 2008(水晶報(bào)表) JDBC連接mysql數(shù)據(jù)庫(kù) - Hongten - 博客園

三.優(yōu)缺點(diǎn)

使用Crystal Reports嘗試配置模板的體驗(yàn),主要與Jasper Studio對(duì)比。

3.1 優(yōu)點(diǎn)

1.流式布局,交互類似office

2.官方demo豐富

3.2 缺點(diǎn)

1.通過(guò)URL加載的圖片不支持https,只接受http

Does Crystal Reports support secure (HTTPS) images - Stack Overflow

2.相關(guān)教程博客很少

3.集成至開(kāi)發(fā)環(huán)境對(duì)C#友好,JAVA對(duì)eclipse友好,無(wú)idea開(kāi)發(fā)控件,官方demo通過(guò)jsp的形式查看報(bào)表

四.集成到項(xiàng)目

4.1 SDK

由于官方?jīng)]有提供idea插件,需要額外引入依賴項(xiàng)文件,下載地址如下,在該頁(yè)面中下載 Runtime Libraries:

SAP Crystal Reports, version for Eclipse - Downloads

值得注意的是,直接從Crystal Reports工具的lib中也可以找到看上去相似的sdk文件,接口完全相同但是實(shí)現(xiàn)完全不同,不可引入項(xiàng)目使用。

maven資源庫(kù)無(wú)所需依賴項(xiàng),需要在項(xiàng)目配置中單獨(dú)添加lib文件。

官方API文檔:

Overview (Report Application Server Java SDK)

4.2 實(shí)戰(zhàn)

官方提供了大量demo程序:

Crystal Reports Java SDK Samples - Business Intelligence (BusinessObjects) - Community Wiki

下面總結(jié)一些常用API范例:

4.2.1導(dǎo)出PDF到瀏覽器

配置模板如下:

?輸出PDF樣例代碼如下:

// 讀取模板文件 ReportClientDocument reportClientDoc = new ReportClientDocument(); reportClientDoc.open("./reports/jrc_export_report.rpt", 0); ByteArrayInputStream byteArrayInputStream = (ByteArrayInputStream) reportClientDoc.getPrintOutputController().export(ReportExportFormat.PDF); reportClientDoc.close(); // 輸出PDF byte[] buffer = new byte[byteArrayInputStream.available()]; int bytesRead = 0; response.reset(); response.setHeader("Content-disposition", "inline;filename=report.pdf"); response.setContentType("application/pdf"); while ((bytesRead = byteArrayInputStream.read(buffer)) != -1) {response.getOutputStream().write(buffer, 0, bytesRead); } response.getOutputStream().flush(); response.getOutputStream().close();

PDF效果圖如下所示:

?4.2.2數(shù)據(jù)庫(kù)連接

在第一個(gè)樣例中,數(shù)據(jù)庫(kù)連接配置在模板中,不需要由代碼配置,這也是默認(rèn)的連接方式。

如需要更改數(shù)據(jù)庫(kù)連接,參考官方實(shí)例change_db_location(CRJ12_Sample_Codes\RCAPI),大致如下:

String REPORT_NAME = "change_db_location/simplereport.rpt"; String DBUSERNAME = "vantech"; String DBPASSWORD = "vantech"; ? String CONNECTION_STRING = "!com.microsoft.jdbc.sqlserver.SQLServerDriver!jdbc:microsoft:sqlserver://10.50.212.103:1433;DatabaseName={database};user={userid};password={password}"; String TRUSTEDCON = "false"; String PREQESERVERNAME = "jdbc:microsoft:sqlserver://10.50.212.103:1433"; String SERVERTYPE = "JDBC (JNDI)"; String DATABASE_DLL = "crdb_jdbc.dll"; String DATABASE = "Xtreme"; String DBCLASSNAME = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; String USEJDBC = "true"; String DATABASE_NAME = "Xtreme"; String SERVERNAME = "jdbc:microsoft:sqlserver://10.50.212.103:1433"; String CONNECTIONURL = "jdbc:microsoft:sqlserver://10.50.212.103:1433"; String SERVER = "10.50.212.103"; ? //Open report. ReportClientDocument boReportClientDocument = new ReportClientDocument(); boReportClientDocument.open(REPORT_NAME, 0); ? // Set DB Username and Password boReportClientDocument.getDatabaseController().logon(DBUSERNAME, DBPASSWORD); ? // Create the two connectioninfo objects to use IConnectionInfo oldConnectionInfo = new ConnectionInfo(); IConnectionInfo newConnectionInfo = new ConnectionInfo(); ? // Assign the old Connection info to the reports current info DatabaseController dbController = boReportClientDocument.getDatabaseController(); oldConnectionInfo = dbController.getConnectionInfos(null).getConnectionInfo(0); ? // If this connection needed parameters, we would use this field. Fields pFields = null; ? // Create a new propertybag for the new location PropertyBag boPropertyBag1 = new PropertyBag(); ? // Set new table logon properties boPropertyBag1.put("JDBC Connection String", CONNECTION_STRING); boPropertyBag1.put("Trusted_Connection", TRUSTEDCON); boPropertyBag1.put("PreQEServerName", PREQESERVERNAME); boPropertyBag1.put("Server Type", SERVERTYPE); boPropertyBag1.put("Database DLL", DATABASE_DLL); boPropertyBag1.put("Database", DATABASE); boPropertyBag1.put("Database Class Name", DBCLASSNAME); boPropertyBag1.put("Use JDBC", USEJDBC); boPropertyBag1.put("Database Name", DATABASE_NAME); boPropertyBag1.put("Server Name", SERVERNAME); boPropertyBag1.put("Connection URL", CONNECTIONURL); boPropertyBag1.put("Server", SERVER); ? // Assign the properties to the connection info newConnectionInfo.setAttributes(boPropertyBag1); ? // Set the DB Username and Pwd newConnectionInfo.setUserName(DBUSERNAME); newConnectionInfo.setPassword(DBPASSWORD); ? // The Kind of connectionInfos is SQL newConnectionInfo.setKind(ConnectionInfoKind.SQL); ? // set the parameters to replace. // The 4 options are: // _doNotVerifyDB // _ignoreCurrentTableQualifiers // _mapFieldByRowsetPosition // _useDefault int replaceParams = DBOptions._ignoreCurrentTableQualifiers + DBOptions._doNotVerifyDB; ? // Now replace the connections dbController.replaceConnection(oldConnectionInfo, newConnectionInfo, pFields, replaceParams);

4.2.3動(dòng)態(tài)注入?yún)?shù)

參考樣例:Java_CRJ12_Web_Set_Parameters(CRJ12_Sample_Codes\ViewingExport)

模板配置如下:

?數(shù)據(jù)填充示例如下:

ReportClientDocument document = new ReportClientDocument(); document.setReportAppServer(ReportClientDocument.inprocConnectionString); document.open("./reports/Java_CRJ12_Web_Set_Parameters.rpt", OpenReportOptions._openAsReadOnly); ParameterFieldController parameterFieldController = document.getDataDefController().getParameterFieldController(); parameterFieldController.setCurrentValue("", "StringParam", "Hello"); parameterFieldController.setCurrentValue("sub", "StringParam", "Subreport string value"); parameterFieldController.setCurrentValue("", "BooleanParam", true); parameterFieldController.setCurrentValue("", "CurrencyParam", 123.45); parameterFieldController.setCurrentValue("", "NumberParam", 123); Calendar calendar = Calendar.getInstance(); calendar.clear(); // Ensure h:m:s and milliseconds cleared calendar.set(2004, Calendar.FEBRUARY, 17); // February 17, 2004 - Month is 0-based. parameterFieldController.setCurrentValue("", "DateParam", calendar.getTime()); calendar.clear(); calendar.set(2002, Calendar.JUNE, 12, 8, 23, 15); parameterFieldController.setCurrentValue("", "DateTimeParam", calendar.getTime()); calendar.clear(); calendar.set(2002, Calendar.JUNE, 12, 13, 44, 59); parameterFieldController.setCurrentValue("", "TimeParam", calendar.getTime()); // Multi-valued string parameterFieldController.setCurrentValues("", "StringMultiParam",new Object[]{"One String", "Two String", "Three String"}); // Range value ParameterFieldRangeValue parameterFieldRangeValue = new ParameterFieldRangeValue(); parameterFieldRangeValue.setBeginValue(1); parameterFieldRangeValue.setEndValue(100); parameterFieldRangeValue.setLowerBoundType(RangeValueBoundType.inclusive); parameterFieldRangeValue.setUpperBoundType(RangeValueBoundType.inclusive); parameterFieldController.setCurrentValue("", "NumberRangeParam", parameterFieldRangeValue); // Multi Range values ParameterFieldRangeValue[] parameterFieldRangeValues = new ParameterFieldRangeValue[2]; parameterFieldRangeValues[0] = new ParameterFieldRangeValue(); parameterFieldRangeValues[0].setBeginValue(12); parameterFieldRangeValues[0].setEndValue(15); parameterFieldRangeValues[0].setLowerBoundType(RangeValueBoundType.inclusive); parameterFieldRangeValues[0].setUpperBoundType(RangeValueBoundType.exclusive); parameterFieldRangeValues[1] = new ParameterFieldRangeValue(); parameterFieldRangeValues[1].setBeginValue(100); parameterFieldRangeValues[1].setEndValue(200); parameterFieldRangeValues[1].setLowerBoundType(RangeValueBoundType.exclusive); parameterFieldRangeValues[1].setUpperBoundType(RangeValueBoundType.exclusive); parameterFieldController.setCurrentValues("", "NumberMultiRangeParam", parameterFieldRangeValues);

最終輸出PDF效果:

?4.2.4子報(bào)表

與4.2.3采用相同示例,配置模板如下:

?實(shí)際展示效果如4.2.3

五.收費(fèi)模式

1.配置工具

工具名稱:SAP Crystal Reports2016

軟件單價(jià)8600元,在線備份服務(wù)76.25元,數(shù)據(jù)來(lái)源為官網(wǎng),查閱時(shí)間為2019年8月8日。

2.開(kāi)發(fā)工具包

免費(fèi)。

總結(jié)

以上是生活随笔為你收集整理的水晶报表Crystal Reports实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。