APP下载

基于水晶报表的查收查引报告自动生成的设计与实现

2017-05-18阚洪海赵杰

现代情报 2017年4期

阚洪海+赵杰

〔摘要〕PDF文档具有跨媒体、跨平台、安全性等特点,适合作为查收查引报告的保存格式。本文以山东大学图书馆的查收查引报告为例,在分析了报告模板的格式特点的基础上,利用水晶报表实现了PDF格式报告的自动生成,并详细介绍了分报表的制作及合并、封面页报表的制作、附件页报表的制作这3个关键步骤。

〔关键词〕水晶报表;查收查引;自动生成;PDF

DOI:10.3969/j.issn.1008-0821.2017.04.020

〔中图分类号〕G250.7;TP393〔文献标识码〕A〔文章编号〕1008-0821(2017)04-0129-05

Design and Implementation of Automatical Generation of Database

Retrieving and Database Processing Reports Based on Crystal ReportsKan Honghai1Zhao Jie2

(1.Library,Shandong University at Weihai,Weihai 264209,China;

2.Library,Shandong University,Jinan 250100,China)

〔Abstract〕PDF documents have the characteristics of cross media,cross platform and high security,so they are suitable for the save format of database retrieving and database processing reports.This paper took Shandong University librarys database retrieving and database processing reports as an example,and based on the analysis of the characteristics of the report template format,it realized the automatical generation of database retrieving and database processing reports in PDF format by using crystal reports.This paper then introduced in detail the three key steps of making and merging the page-break reports,making the cover page reports,and making the attachment page reports.

〔Key words〕crystal reports;database retrieving and data processing;automatical generation;PDF

查收查引服務又称论文收录引用服务、代查代检服务,主要是通过作者姓名、单位、文献篇名、期刊名称及卷期、会议名称等字段,检索委托人或委托单位的论文被国内外权威数据库收录以及引用情况,并出具纸质的检索证明[1]。高校图书馆大都拥有国内外各类权威数据库的使用权限,查收查引服务已成为高校图书馆信息检索工作的一项重要内容。

查收查引服务是工作量大、重复度高的劳动,为提高工作效率、规范报告格式,很多高校图书馆和科研单位自主开发了相关的自动化系统,比较典型的有清华大学研发的代查代检服务系统[2]、中国科学院软件研究所研发的科技文献查收查引报告自动生成系统[3]、北京邮电大学图书馆研发的关于科技查新的WEB在线服务系统[4]。这些系统实现了查收查引工作的网上提交、检索员网上录入检索结果、费用管理等自动化流程,中国科学院研发的系统还实现了被引和他引的自动识别。这些系统最后都能够自动导出报告,但都没有介绍导出报告的格式和技术细节。

山东大学在设计自己的查收查引系统时,综合比较分析了当前各种主流文档格式的特点,最后认为PDF文档具有跨媒体、跨平台、安全等特点[5],适合作为查收查引报告的最终输出格式。利用水晶报表软件自动在线生成PDF格式的查收查引报告,不仅提高了工作效率、保证了报告格式的一致性,又提高了图书馆存档文件的规范化和标准化。

1报告格式分析及实现难点

1.1查收查引报告格式分析

如图1所示,山东大学图书馆出具的查收查引报告都由统一的模板生成,保证了报告格式的统一性和内容的完整性。报告的内容及格式特点主要有:

1)报告内容分为3部分:封面、附件一、附件二,每部分都有独立的格式。封面只有1页,附件一和附件二如果内容过长会有多页,但附件一和附件二页脚的页码都是独立编号,都从1开始,如附件二第1页页脚显示为“(附件二)第1页,共1页”。

2)封面左上角是当前报告的编号信息,如“检索编号:JS120170001”。本检索编号同时出现在附件一和附件二的页眉位置,附件一和附件二的页眉信息对应是“教育部科技查新工作站Z06山东大学图书馆检索编号JS120170001”。

3)封面主体部分显示委托人、委托单位、检索内容、检索数据库、检索结果,底部显示检索人、检索单位、检索日期。

4)附件一显示被检文献列表。横线下“委托人发表文章的收录情况列表”是页眉的一部分。被检文献列表按照索引数据库分组显示,如本示例中,先显示“以下为张三论文被SCI-E收录情况”,跟着是3篇SCI-E文章,再后面是分组二“以下为张三论文被Ei Compendex收录情况”。每组的文章都从1开始单独编号。

5)附件二是检索到SCI-E文章所发表期刊的JCR详细指标信息。主体部分按“期刊/年代”逐条显示,表头显示期刊名、ISSN、参考年、参考年影响因子,然后以表格形式列出了期刊指定年份的各类影响因子指标。如果被检文献没有被SCI-E收录,报告就没有附件二,只有封面和附件一。

1.2自动生成PDF报告的技术关键点分析

根据以上分析,山东大学的查收查引报告,虽然内容繁多、格式严格,但又有一定的规律性。根据格式上的规律特点,应用计算机软件自动生成PDF报告是可行的。以下是几个需要重点解决的技术关键点:

1)封面只有1页,显示内容的位置相对固定。而附件二和附件三随着内容增加会有很多页,而且有着不同于封面的页眉和页脚。如何设计模板同时生成这3类内容的页面,是需要首先解决的难题。

2)封面主体部分主要显示委托人、委托单位、检索内容、检索数据库、检索结果。如果检索内容的详细内容过长就会自动换行,导致下面检索数据库标题和内容的位置也需要跟着下移。同理,如果检索数据库内容过长出现换行,也会导致后面检索结果位置下移。如何检测内容过长会出现换行,并定位下面行的显示坐标,也是本系统的难点。

3)附件内容的生成。附件一先按索引数据库分组,然后分篇显示被检文献详细内容。附件二按“期刊/年代”逐项显示,以表格形式显示期刊某一参考年份的影响因子指标。严格的格式要求,给设计报表模板带来不小的技术难度。

2系统的总体设计

2.1运行环境及系统架构

考虑到检索员众多、检索员办公地点分散、系统升级维护方便、检索报告便于统一存档管理等因素,山东大学的查收查引报告管理系统采用B/S架构(即浏览器/服务器模式),检索员和委托人通过客户端电脑安装的浏览器直接访问系统,实现各类操作。

为提高整个系统的扩展性、可维护性和健壮性,在设计软件框架时我们采用了流行的三层架构体系,将整个软件系统分为表现层、业务层、数据层[6]。如图2所示,自动生成PDF报告模块位于中间的业务层。操作员通过表现层界面调用PDF报告生成模块,生成模块通过数据层的数据访问适配器从数据库里调用已保存好的委托人姓名、检索结论、检索文章列表等信息,自动在服务器上生成PDF格式的查收查引报告文档,并归档保存在服务器上指定目录下。检索员打印报告时,根据系统生成的加密链接从服务器上调取查收查引报告,报告调取到客户机缓存后可以打开预览,确认无误后打印交付给委托人。

2.2报表生成软件的选择

为了简化部署、提高系統的扩展性,本系统采用Visual Studio 2012作为开发平台,C#作为开发语言,Sql Server 2008作为后台数据库。在报表软件的选择上,本系统最终选用了水晶报表来实现PDF格式查收查引报告的自动生成,主要考虑到水晶报表有以下优点:

1)水晶报表是业内最专业、功能最强的报表系统。它不仅具有强大的报表功能,还实现了与绝大多数流行开发工具的集成和接口,特别是Visual Studio[7]。本系统使用的Crystal Report 13.0.5版本,可以很好地集成到开发环境Visual Studio 2012内,具有强大、高效、集成等优势。

2)水晶报表提供了强大的报表设计工具Crystal Report Designer,具有数据可视化和分析功能。在数据控制方面,提供了拉模式(Pull Model)和推模式(Push Model)两种方式[8]。拉模式是由水晶报表模板(引擎)直接从数据库里拉取数据,可以用来显示报告编号、检索人、检索日期等固定信息;推模式由应用程序从数据库获取数据,经过数据处理后再把数据推送给水晶报表引擎,可以用来分组显示检索文章列表等这些复杂的内容。

3)水晶报表能够稳定、高效、动态地将报表导出成为.pdf、.doc、xls、html、rtf等多种格式。本系统借助水晶报表将查收查引报告导出为PDF格式的文档,并保存在服务器上。

3水晶报表在线生成PDF格式报告的关键技术

3.1报表模板的设计及打印

在报表开发工作中,首先要确定报表的种类和格式,然后针对性的制作一个报表模板,模板主要包含要打印的数据和显示格式。如前面所述,查收查引报告的内容包含封面、附件一和附件二这三部分内容,这三部分在内容、格式、显示数据上差别很大。要想在一个报表模板上显示这三部分,实现起来难度很大。

为解决这一难题,本系统开发时创建了3个水晶报表模板文件cover.rpt、attachment1.rpt、attachment2.rpt,分别 用来生成封面、附件一、附件二。程序运行时3个报表模板文件在服务器上分别生成3个临时的PDF文件,最后再把这3个文件合并成一个最终的查收查引报告文件。通过水晶报表模板文件cover.rpt在服务器上生成报告封面的PDF文件的核心代码如下,生成附件一和附件二PDF文件的过程和生成封面的代码类似。

ReportDocument oRpt=new ReportDocument();

string strPath=Server.MapPath(″\\CrystalReport\\cover.rpt″);

oRpt.Load(strPath);

CrystalDecisions.Shared.DiskFileDestinationOptions crFileOptions=new CrystalDecisions.Shared.DiskFileDestinationOptions();

string fileName=DateTime.Now.ToString(″s″)+″cover.pdf″;

string fileFullName=HttpContext.Current.Server.MapPath(″~/PdfFolder/temp/″)+fileName;

crFileOptions.DiskFileName=fileFullName;

oRpt.ExportOptions.DestinationOptions=crFileOptions;

oRpt.ExportOptions.ExportDestinationType=ExportDestinationType.DiskFile;

oRpt.ExportOptions.ExportFormatType=ExportFormatType.PortableDocFormat;

oRpt.Export();

3个文档都生成后,最后需要合并成一个PDF文件。合并时,先在服务器上建立一个空的PDF文件,然后依次打开封面、附件一、附件二这3个文件,把3个文件内的页面分别按顺序导入到新建立的空PDF文件内。附件二的页面导入到新建立PDF文件内的核心代码如下:

3.2封面页水晶报表模板的制作

在Visual Studio 2012设计器内,添加报表模板文件cover.rpt,如图3所示。页眉显示项、证明编号标题、检索证明等固定显示项,通过从工具栏拖动Text Object控件到模板指定位置添加,并设置控件Text属性为显示内容。证明编号、检索人、检索日期等这些每篇报告都显示不一样的地方,也用类似的方法添加Text Object控件,控件的赋值可以采用拉模式直接从数据库里拉取数据,也可以在程序代码里通过控件名称直接赋值,给显示证明编号的文本控件txtPdfNo在程序里赋值时的核心代码如下:

∥临时表dtList内保存了当前查收查引记录的申请人、编号等基本信息

txtPdfNo.Text=dtList.Rows[0][″PDFNO″].ToString();

封面主体部分显示委托人、委托单位、检索内容、检索数据库、检索结果。如果采用Text Object控件显示各项的标题和内容,模板设计时各项的显示坐标是固定的,不会随着内容的换行自动调整。为解决这一难点,本系统在数据库里建立数据表RetrievePMain,列标题和内部初始数据如表1所示。

在“字段资源管理器”的“数据库字段”上按右键,选择“数据库专家”,建创建新连接,从OLE DB(ADO)下选择Microsoft OLE DB Provider for Sql Server,一步步操作,最后选择表RetrievePMain。最后回到“字段资源管理器”界面,将字段Title和Cont分别拖到Cover.rpt模板文件Section3(Details)节内,并调整显示位置和显示格式,实现显示数据的绑定[9]。数据库内,Cont字段内容是空的,没有保存数据,数据在打印时由程序根据要显示的具体报告在临时表dtPMain内动态生成。核心代码如下:

3.3附件页水晶报表模板的制作

附件一用来分组打印被检文献列表,打印时先按照被收录数据库分组,报表设计界面如图4所示。设计时和前面设计封面模板的步骤相似,先在字段管理器内将表RetrievePList加载进来。然后在空白位置点右键,弹出窗口内选择Report-Group Export,打開分组设计向导,将表RetrievePList的INDEXGNAME字段添加到右边选择框内,实现打印列表按照收录数据库名分组[10]。最后将被检文献序号ID和文献内容DETAILS拖到报表设计器Section3(Details)节内,并调整位置和显示格式。

附件一显示格式和内容都有严格要求,数据库内直接拉取的数据不能完全满足显示要求,因此需要采用推模式显示被引文献列表,具体步骤和封面主体内容生成步骤类似,先将数据加载到临时表dtArticle,然后根据显示要求修改dtArticle内的数据,最后绑定报表模板输出。表dtArticle的INDEXGNAME字段表示文献显示时的组标题,代码处理时逐行遍历表dtArticle内记录,按照要求修改INDEXGNAME的值,核心代码如下:

代码内strAuthorName表示委托人姓名,dtArticle.Rows[i][″INDEXNAME″].ToString()表示当前文献被索引数据库的名称,如本例第一篇文献的INDEXGNAME会赋值成“以下为张三沦为被SCI-E收录情况:”。

附件二用来显示SCI-E收录文献的期刊的详细影响因子列表。报表设计时直接采用拉模式绑定数据表RetrievePIF,然后拖动要显示的字段到报表设计器上。

4结语

本文开发的基于水晶报表的查收查引报告自动生成系统,已经正式应用到山东大学的查收查引管理系统。经过1年多的使用,系统运行稳定,并根据检索员的使用建议不断优化。经过对比测试,检索员录入数据由系统在线自动生成PDF文档,与检索员将数据拷贝到WORD模板内排版并生成PDF文档相比较,采用系统能平均节省2/3以上的时间。而且,采用系统自动生成PDF报告,具有准确度高、格式统一、自动在服务器集中存档等优点。本系统基于水晶报表自动生成PDF格式文档,也可以应用到查新报告工作中,根据输入项自动生成PDF格式的查新报告。

同时我们也能发现,最终报告的格式和显示的内容,直接依赖制作的报表模板文件。显示信息项、显示格式、及辅助的表格线等信息都固定在报表模板上,难以灵活变动和增删。这一不足制约了后期报告格式的修改,更不利于在其它检索单位推广。如何进一步开发本系统,允许用户根据本单位查收查引报告的格式要求,通过图形化界面自定义报表模板,灵活修改报表模板显示的信息项、显示格式、显示位置等内容,是值得进一步研究的地方。

参考文献

[1]梁红妮,胡小飞.论文查收查引服务的分析与探讨[J].情报理论与实践,2009,(4):96-99.

[2]战玉华,程爱平,钱俊雯,等.代检代查服务系统的开发及应用[J].图书情报工作,2005,(11):75-77,55.

[3]王学勤,郝丹,郑菲,等.“查收查引报告自动生成系统”应用实践研究[J].图书情报工作,2014,(16):131-137.

[4]侯瑞芳,陈嘉勇,周婕.查收查引服务优化体系的构建与思考[J].图书馆建设,2015,(4):75-79.

[5]胡荣磊,左良,蒋华.PDF版式文档在电子签章系统中的应用与实现[J].信息技术,2016,(4):64-68.

[6]密君英.基于三层架构的ASP.NET项目实战教程[M].北京:中国电力出版社,2011:8-10.

[7]百度百科.水晶报表[EB/OL].http:∥baike.baidu.com/link?url=C-T6BSTtmtHqt-LRCcuStNJmoSz89gmSX8vAZinxIUTEtrdz CF0heXnOoW2MNL-H8HpmnFXuXrTc6ohRNoW5Fk2Ru2Rrg87eC6o uWgqnEZrn-ia3Rb9G4dC4gMaIQ,2017-01-23.

[8]丛凤侠,杨玉强.通用水晶报表平台关键技术研究[J].计算机技术与发展,2013,(6):219-222,226.

[9]王华杰,李律松,孙一波.精通C#数据库开发[M].北京:清华大学出版社,2004:107-108.

[10]郭琦.Visual Basic数据库系统开发技术[M].北京:人民邮电出版社,2003:221-222.