水晶报表Crystal Reports实例

一.安装

官网下载试用安装工具Crystal Reports,注册获得试用期30天。

二.配置数据源

Crystal Reports 2008(水晶报表) JDBC连接mysql数据库 - Hongten - 博客园

三.优缺点

使用Crystal Reports尝试配置模板的体验,主要与Jasper Studio对比。

3.1 优点

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

2.官方demo丰富

3.2 缺点

1.通过URL加载的图片不支持https,只接受http

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

2.相关教程博客很少

3.集成至开发环境对C#友好,JAVA对eclipse友好,无idea开发控件,官方demo通过jsp的形式查看报表

四.集成到项目

4.1 SDK

由于官方没有提供idea插件,需要额外引入依赖项文件,下载地址如下,在该页面中下载 Runtime Libraries:

SAP Crystal Reports, version for Eclipse - Downloads

值得注意的是,直接从Crystal Reports工具的lib中也可以找到看上去相似的sdk文件,接口完全相同但是实现完全不同,不可引入项目使用。

maven资源库无所需依赖项,需要在项目配置中单独添加lib文件。

官方API文档:

Overview (Report Application Server Java SDK)

4.2 实战

官方提供了大量demo程序:

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

下面总结一些常用API范例:

4.2.1导出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数据库连接

在第一个样例中,数据库连接配置在模板中,不需要由代码配置,这也是默认的连接方式。

如需要更改数据库连接,参考官方实例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动态注入参数

参考样例:Java_CRJ12_Web_Set_Parameters(CRJ12_Sample_Codes\ViewingExport)

模板配置如下:

 数据填充示例如下:

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子报表

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

 实际展示效果如4.2.3

五.收费模式

1.配置工具

工具名称:SAP Crystal Reports2016

软件单价8600元,在线备份服务76.25元,数据来源为官网,查阅时间为2019年8月8日。

2.开发工具包

免费。

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: Crystal Reports是一款强大的报表设计和生成工具,它是由SAP公司开发的。这个控件可以与各种数据库进行集成,如Oracle、SQL Server、MySQL等。借助Crystal Reports,用户可以轻松地创建各种类型的报表,包括表格报表、图形报表和交叉报表等。该控件提供了丰富的数据处理和分析功能,使用户能够对数据进行排序、计算、筛选和汇总等操作。 使用Crystal Reports控件,用户可以通过简单的拖放操作,将数据字段添加到报表中,并按照自己的需求进行布局和格式化。用户可以设置报表的标题、页眉和页脚,自定义报表的样式和风格。此外,Crystal Reports还支持多语言功能,用户可以根据需要将报表翻译成不同的语言。 Crystal Reports还提供了灵活的参数选择功能,可以让用户根据不同的条件和需求生成不同的报表。用户可以设置参数,如日期范围、地区等,然后生成相应的报表。 此外,Crystal Reports还支持导出报表为不同的格式,如PDF、Excel、Word等。用户可以将报表保存为文件,或者通过电子邮件或打印等方式分享给其他人。 总的来说,Crystal Reports控件是一款功能强大、易于使用的报表生成工具。它可以帮助用户快速、准确地创建各种类型的报表,并对数据进行处理和分析。无论是个人用户还是企业用户,都可以从Crystal Reports中受益。 ### 回答2: Crystal Reports 控件是一种功能强大的报表生成工具,可以用于创建和定制各种类型的报表。它提供了丰富的功能和灵活的设计工具,方便用户根据需求进行报表设计和数据分析。 首先,Crystal Reports 控件可以连接到各种数据源,包括关系型数据库、Excel文件、文本文件等,使用户能够方便地从不同数据源中提取数据用于报表生成。同时,它还支持多种数据源的联合查询,可以将不同数据源的数据进行关联,生成更加综合和全面的报表。 其次,Crystal Reports 控件具有丰富的报表设计工具,包括报表模板、布局设计、数据字段选择等功能。用户可以根据需要自定义报表的样式、格式和布局,还可以通过添加图表、图像和其他视觉元素来增强报表的可视化效果。 此外,Crystal Reports 控件还支持数据汇总、排序、筛选和分组等功能,方便用户对报表数据进行整理和统计。用户还可以通过添加参数、公式和条件语句等来对报表数据进行更加灵活的处理和分析。 最后,Crystal Reports 控件还提供了多种输出选项,包括打印、导出为PDF、Excel、Word等格式,使用户能够方便地共享和分发报表。 综上所述,Crystal Reports 控件是一款功能强大、灵活易用的报表生成工具,可以帮助用户方便地创建、设计和分析各种类型的报表,满足企业和个人对于报表的需求。它的丰富功能和可定制性使其成为许多公司和组织进行数据分析和决策支持的重要工具。 ### 回答3: Crystal Reports控件是一款功能强大的报表设计和生成工具。它允许用户创建、定制和生成各种复杂的报表,用于分析和展示数据。 Crystal Reports控件具有丰富的功能与灵活的设计选项。用户可以通过简单的拖放操作将数据源与报表模板关联,然后进行布局、格式化和计算字段等操作。还可以使用各种图表、图形和计算字段等功能来使报表更加直观生动。 该控件支持多种数据源,包括关系数据库、文本文件、XML文件等。用户可以根据需要连接到各种数据源,然后使用SQL查询或存储过程来获取数据。Crystal Reports还提供了数据连接和筛选、数据聚合和汇总等功能,以满足用户不同的数据分析需求。 此外,Crystal Reports控件还提供了强大的报表导出和分享功能。用户可以将报表导出为PDF、Excel、Word等格式,方便与他人共享或存档。同时,还可以将报表作为纯HTML或动态网页嵌入到网站中,实现在线报表的展示和查询。 总之,Crystal Reports控件是一款功能强大、灵活易用的报表设计和生成工具。它能够帮助用户快速创建各种复杂的报表,并提供了丰富的数据分析和展示功能,满足用户不同的报表需求。无论是个人用户还是企业用户,都可以借助Crystal Reports控件轻松完成报表设计与生成的任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值