水晶报表Crystal Reports实例
一.安裝
官網(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)題。
- 上一篇: 电子元器件篇—三极管
- 下一篇: 小白学习Excel VBA (一)