水晶报表在基于.NET 的高校学生信息管理系统中的应用

2014-06-09 08:05张素莉朱春娆
关键词:通知书条形码数据源

张 华,张素莉,朱春娆

(1.长春工程学院计算机技术与工程学院;2.图书馆,长春130012)

0 引言

高校学生信息管理系统(以下简称本系统)是面向招生办、财务处、教务处、院系、学生处等多种用户的公共数据平台,在本系统中要实现各院系专业报表、各专业班级报表、各班级学生名单报表、学生缴费信息报表、学生奖惩信息报表、学生录取通知书等相关报表功能,各种报表生成后还需要打印、导出、统计、翻页等功能,在本来就较为庞大的管理系统中实现如此多的报表功能,我们必须考虑一种性能较高的报表工具,因为本系统基于.NET开发,因此采用.NET环境内置的水晶报表。水晶报表操作相比较于其他的报表实现方式较为容易,且能灵活地实现系统要求的各种功能,提高工作效率,使报表设计更专业。

1 报表打印的相关知识和技术

1.1 条形码中的Code39码

条形码中最为常用的有Code39码和Code128码,学校的扫描枪识别39码,故在系统中使用了39码。Code 39码是Intermec公司于1975年推出的一维条码,39码是一种可供使用者双向扫瞄的分散式条码,即如果使用者把39码倒着读取也是得到相同的结果,且39码支持数字,编码规则简单、误码率低、所能表示字符个数多,因此39码在各个领域有着极为广泛的应用。39码仅有2种单元宽度——分别为宽单元和窄单元,宽单元这宽度为窄单元的1~3倍,一般多选用2倍、2.5倍或3倍。39码的每一个条码字符由9个单元组成,其中有3个宽单元,其余是窄单元,因此称为39码,其构成元素为:起始码+资料码+终止码,其中起始码与终止码均为*字符,如图1所示,在系统中条形码用来标识新生录取通知书中的通知书编号,供新生报道时各院系扫描,完成新生报道。

图1 Code39码表示的条形码

1.2 水晶报表

水晶报表(Crystal Reports)是世界领先的用于创建交互式报表的软件包,支持大多数流行的开发语言,可以创建简单的报表,也可以创建专业的、复杂的报表,它可以从任何数据源生成所需要的报表,就如Microsoft Office Visio一样,可以绘制不同行业(如建筑、工艺、电气等)的图形(如流程图、业务逻辑图、工程图等),创建出的报表可以方便地实现分页、下载及导出为各种其他格式。水晶报表在1993年成为 Visual Studio(简称 VS)的一部分,在VS2003、VS2005、VS2008的开发环境中都默认自带水晶报表,而在VS2010的开发环境中默认没有水晶报表,开发人员在使用时,需要先到SAP官方网站下载特定的安装文件进行安装后才可以使用。水晶报表的数据访问模式分为PULL模式(拉模式)和PUSH模式(推模式)。PULL模式是驱动程序会自动连接至数据库并根据需要来提取数据,开发人员不需要另外编写代码;PUSH模式下,开发人员必须自行编写代码来连接至数据库,创建SQL命令填充数据集对象,并将该对象传送给报表。PUSH模式下,开发人员对数据源拥有更多的自主权和控制权,并可以使用包括ADO.NET在内的各种数据源。在本系统中,使用PUSH模式操作水晶报表。

2 水晶报表在系统中的典型应用

2.1 在报表中显示学生照片

在基于.NET的Web应用程序设计中,通常有2种方法保存图片数据信息:一种是直接把图片文件转换成字节数组保存在数据库,如SQL Server中;另一种是在图片上传时将图片保留原扩展名,但重命名为一个永远不重复的随机流水号从而形成图片的一个新名称,将此新名称保存至数据库中,而图片文件本身保存至Web应用程序的某个特定目录下。在本系统中图片信息主要指新生的照片。

水晶报表中不识别扩展名为GIF格式的图片,所以学生照片尽量采用JPG或PNG格式,本系统中从全国高考录取系统中导出的学生照片均为JPG格式。如果使用第1种方法保存图片信息,在水晶报表中连接至数据源DataSet后,可以将数据源中的学生照片字段直接拖至报表界面,即可正确显示学生照片。在本系统中为了减小数据库的占用空间,照片信息使用第2种方式保存,这也使得不能像第1种方式一样简便地使水晶报表呈现学生照片,中间需要一个转换过程,具体如下:

(1)在创建数据源DataSet架构时,照片字段必须设置为System.Byte[]类型。

(2)在使用DataAdapter对象填充DataSet时,照片字段要经由如下方法进行转换,将原来字符串格式的照片名结合相应路径后转换成字节数组。

(3)将转换成功的照片字段直接拖拽至报表界面中,即可正确显示学生照片,实现效果如图4。

2.2 参数化报表显示数据信息

水晶报表可以接收Web应用程序传递的参数,报表可以根据接收到的参数值在数据源中进行数据筛选,从而显示满足参数条件的记录集。如显示某专业下的班级记录,数据源中包含所有的班级记录,报表要根据传递的专业信息动态显示此专业下的班级记录,这需要在报表文件和调用报表的代码中同时定义参数字段专业,2处所定义的参数数据类型和名称要严格保持一致,具体过程如下:

(1)在报表文件中新建参数字段MajorID,并编辑此参数字段,使数据源中的专业字段(假设为MID)的值等于此参数字段,如图2所示。

图2 参数字段的设置

(2)在调用报表的代码中设置相同的参数字段MajorID,并为其赋值,具体代码如下:

2.3 创建新生录取通知书并打印

本系统如果使用ASP或JSP实现,新生录取通知书的设计及制作都会非常复杂,而在.NET中,因为内置了水晶报表,实现起来相对较为容易,但因为此报表中包含学生照片及扫描枪所要识别的通知书编号条形码,都属于较为复杂的报表应用,所以此报表的实现也是本系统的一个难点。通知书编号在数据库中以普通字符串的格式保存,需要先将此字符串前后加“*”字符,然后按照Code39码的字符与条码的转换依据,将普通的字符串转换成条码字符串,再借助于.NET中的GDI+转换成图像,最后生成对应的字节数组。在这个过程中,Code39码的转换依据是固定的,使用GDI+转换成图像的具体过程如下:

报表设计界面如图3。

图3 新生录取通知书报表设计界面

网页运行时,为了能够正确显示出条形码,计算机必须先安装C39P72D1Tt.TTF字体到系统字体文件夹(C:\WINDOWS\Fonts)中,具体显示界面如图4所示。

图4 新生录取通知书报表显示界面

3 水晶报表在VS中可能会遇到的问题

3.1 报表中出现“已达到系统管理员配置的最大报表处理作业数限制”的错误

系统在学校内全面公测时,各院系分别使用各自的账号登录系统测试学生信息打印及导出功能时出现了此问题,经过作者的反复研究及测试,发现出现此问题有2个原因:

(1)自身编码的问题

在编码过程中,使用完CrystalDecisions.Crys-talReports.Engine.ReportDocument报表文档对象后没有及时关闭并释放,解决方法是在处理报表页面加上以下代码:

(2)操作系统默认打开的报表数量有限

操作系统默认打开的报表数量是有限制的,如果很多用户同时应用报表功能,可能会出现如上问题,这需要在注册表中增加操作系统默认打开的报表数量,具体方法如下:点击“开始”,在运行中输入“regedit”打开注册表编辑器,修改PrintJobLimit的值,完成后重启电脑,使修改生效。

第1处:HKEY_LOCAL_MACHINE;SOFTWARE;Crystal Decisions;10.0;Report ApplicationServer;InprocServer;PrintJobLimit把 它 的 值100修改为一个足够大的数目。

第2处:HKEY_LOCAL_MACHINE;SOFTWARE;Crystal Decisions;10.0;Report ApplicationServer;Server;PrintJobLimit修改为把它的值76修改为一个足够大的数目。

3.2 VS2010中水晶报表与VS2008水晶报表版本冲突

此问题出现在作者编码过程中,由于作者的电脑上安装了多个VS版本,导致在VS2010中报表使用出现问题。具体表现为:VS2010中的水晶报表单独安装成功后,会在VS的工具栏中出现【报表设计】一栏,里面有3个控件,当把这3个控件任意一个拖拽到页面上时,控件会报错,显示“未将对象引用设置到对象实例”,运行页面,则会出现如下提示:类 型 “CrystalDecisions.Web.CrystalReport-Viewer”同时存在于“c:\Windows\assembly\GAC_MSIL\CrystalDecisions.Web\13.0.2000.0_692fbea5521e1304\CrystalDecisions.Web.dll”和“c:\Windows\assembly\GAC_MSIL\CrystalDecisions.Web\10.5.3700.0_692fbea5521e1304\CrystalDecisions.Web.dll”中,这是因为 VS2010中水晶报表V13与VS2008中水晶报表V10版本冲突,导致程序在编译时无法正确定位到正确版本的DLL文件,在VS2010中,所有的DLL文件都应该使用V13,具体解决方法如下:

(1)先检查web.config文件中关于程序集的引用,是否为V13版本

(2)在项目根目录下添加Bin文件夹,将C:\Program Files\SAP BusinessObjects\Crystal Reports for.NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet文件夹中的5个DLL文件复制到当前项目的Bin文件夹中:

(3)最后将VS工具箱中“报表设计”选项卡下用到的控件拖拽到Web页面中,切换到HTML视图,将页面头部关于水晶报表的引用代码,由版本10修改为版本13:

设计不同业务逻辑所需的报表时,可能会遇到不同的问题,以上是作者在本系统中遇到的典型问题,其他小问题此处不再赘述。

4 结语

应用水晶报表实现了高校学生信息管理系统中的各种报表设计,系统运行3年来报表显示稳定、准确、即时、高效,避免了之前各用户在传递和共享资料时的烦琐、不及时和不准确等问题,并且提供了报表查看的多样化,既可以在线查看、也可以导出PDF、Excel等电子版,还可以打印纸质版,进一步促进了高校的信息化管理。

[1]李航,陈志国,沈建.基于.NET的报表实现技术的分析[J].软件导刊,2008,7(1):50-53.

[2]甘光生..NET环境下使用水晶报表系统设计与实现WEB报表[J].电脑知识与技术,2005(30):60-62.

[3]林小龙,吴奕甫,罗光红..NET环境中内置的水晶报表的生成和发布[J].信息技术,2010(10):149-151.

猜你喜欢
通知书条形码数据源
入学通知书
创意条形码
工地上的他收到了北大录取通知书
从条形码到二维码
从条形码到二维码
Web 大数据系统数据源选择*
条形码大变身
基于不同网络数据源的期刊评价研究
通知书
50年前的大学录取通知书