一.安装

官网下载试用安装工具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.开发工具包

免费。

水晶报表Crystal Reports实例相关推荐

  1. bdm导入mysql_vs 2010下使用水晶报表Crystal Reports

    vs 2010下使用水晶报表Crystal Reports 的详细步骤 一.所需条件 1. 工作环境 VS 2010(页面和报表文件要在不同文件夹),对VS 2008,VS 2005 也可. 2. 数 ...

  2. 报表学习总结(一)——ASP.NET 水晶报表(Crystal Reports)的简单使用

    报表学习总结(一)--ASP.NET 水晶报表(Crystal Reports)的简单使用 目录 一.水晶报表简介 二.水晶报表的实现模式 2.1.拉(PULL)模式 2.1.1.不敲一句代码创建水晶 ...

  3. [水晶报表]如何设置水晶报表(crystal reports)的字段自动换行

    在做报价系统时候水晶报表做最后报表的产出.由于规格字数较长,用户在预览报表时无法看全规格,规格多出部分会导致重叠现象. 百度文库提供一个解决方案: 1.如何设置水晶报表(crystal reports ...

  4. vs 2010下使用水晶报表Crystal Reports

    vs 2010下使用水晶报表Crystal Reports (2013-04-26 10:34:41) vs 2010下使用水晶报表Crystal Reports 的详细步骤 一.所需条件 1. 工作 ...

  5. 水晶报表Crystal Reports XI服务器版

    Crystal Reports-可协助用户在企业网站或应用系统中设计.管理以及发布报表.水晶报表为企业提供了一个扎实的商业智能(Business Intelligence)的起始点,将零散的重要信息通 ...

  6. 水晶报表 (Crystal Reports) code128 条形码 保存为PDF后 不显示条形码的 解决办法

    水晶报表  打开后  条形码是正常显示 但是 保存为PDF后  条形码 就变成显示数字 如下图所示 解决办法为: 需要在 水晶报表  程序所在的web服务器上 安装 Adobe Acrobat Rea ...

  7. 水晶报表Crystal 语法 实用字段编辑

    公式字段 转日期文本 totext ({IC_AvailabilityContract.Thedatethecontractissigned},"yyyy年MM月dd日") 产品图 ...

  8. C#之二十三 打印和水晶报表

    视频课堂https://edu.csdn.net/course/play/7621 C#程序设计及宿舍管理系统实战  https://edu.csdn.net/course/detail/27107 ...

  9. php可以用水晶报表吗,什么是水晶报表与水晶报表功能分析

    水晶报表 水晶报表(Crystal Report)是业内最专业.功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口.在VS.Net平台做过报表开发的程序员 ...

  10. python 水晶报表_什么是水晶报表与水晶报表功能分析

    水晶报表 水晶报表(Crystal Report)是业内最专业.功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口.在VS.Net平台做过报表开发的程序员 ...

最新文章

  1. muduo之BlockingQueue
  2. Python3转义字符
  3. 几个实用的Servlet应用例子-入门、cookie、session及上传文件
  4. vuex的命名空间有哪些_Python3 命名空间和作用域
  5. 祖传CMOS走出家门,佳能将在传感器供应圈中决战索尼
  6. [excel]舒尔特练习法
  7. 数字图像处理实验九维纳滤波
  8. KUKA 机器人仿真软件OfficeLite
  9. 从零开始写项目【总结】
  10. CVPR 2022 论文列表(持续更新)
  11. PHOTOSHOP基本概念解释【转】
  12. 在STM32上对EV1527等无线编码格式的C程序编码实现
  13. php中有关文件包含的函数有哪些,文件包含有关
  14. 【AI达人创造营第二期】基于PaddleClas的新冠肺炎CT影像的分类
  15. 音频合成:TTS和歌声合成
  16. java 去除HTML中的所有标签,获取TEXT文本
  17. 计算机代数的应用,计算机代数及其应用-陶庆生(1991).pdf
  18. 你的机器启用ClearType了吗?
  19. HDFS精华文章汇总
  20. 【IoT】如何快速了解一个行业?如何做市场洞察?

热门文章

  1. Jsoup爬虫之Java爬虫工具类
  2. ios开发快速入门教程
  3. CF528D. Fuzzy Search [FFT]
  4. 建立书签链接的html语言,书签链接
  5. 【音乐可视化】音乐表演可视化软件分析
  6. rgba 和 IE 的 filter数值转换
  7. matlab 对数函数表示,matlab对数函数怎么表示
  8. 计算机网络ospf配置命令,华为OSPF协议基本配置 -电脑资料
  9. 够设计师用一辈子的25款经典英文字体
  10. python语言程序设计二级教程pdf_二级python语言程序设计教程