闞洪海+趙杰
〔摘要〕PDF文檔具有跨媒體、跨平臺、安全性等特點,適合作為查收查引報告的保存格式。本文以山東大學圖書館的查收查引報告為例,在分析了報告模板的格式特點的基礎上,利用水晶報表實現(xiàn)了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
查收查引服務又稱論文收錄引用服務、代查代檢服務,主要是通過作者姓名、單位、文獻篇名、期刊名稱及卷期、會議名稱等字段,檢索委托人或委托單位的論文被國內外權威數(shù)據(jù)庫收錄以及引用情況,并出具紙質的檢索證明[1]。高校圖書館大都擁有國內外各類權威數(shù)據(jù)庫的使用權限,查收查引服務已成為高校圖書館信息檢索工作的一項重要內容。
查收查引服務是工作量大、重復度高的勞動,為提高工作效率、規(guī)范報告格式,很多高校圖書館和科研單位自主開發(fā)了相關的自動化系統(tǒng),比較典型的有清華大學研發(fā)的代查代檢服務系統(tǒng)[2]、中國科學院軟件研究所研發(fā)的科技文獻查收查引報告自動生成系統(tǒng)[3]、北京郵電大學圖書館研發(fā)的關于科技查新的WEB在線服務系統(tǒng)[4]。這些系統(tǒng)實現(xiàn)了查收查引工作的網(wǎng)上提交、檢索員網(wǎng)上錄入檢索結果、費用管理等自動化流程,中國科學院研發(fā)的系統(tǒng)還實現(xiàn)了被引和他引的自動識別。這些系統(tǒng)最后都能夠自動導出報告,但都沒有介紹導出報告的格式和技術細節(jié)。
山東大學在設計自己的查收查引系統(tǒng)時,綜合比較分析了當前各種主流文檔格式的特點,最后認為PDF文檔具有跨媒體、跨平臺、安全等特點[5],適合作為查收查引報告的最終輸出格式。利用水晶報表軟件自動在線生成PDF格式的查收查引報告,不僅提高了工作效率、保證了報告格式的一致性,又提高了圖書館存檔文件的規(guī)范化和標準化。
1報告格式分析及實現(xiàn)難點
1.1查收查引報告格式分析
如圖1所示,山東大學圖書館出具的查收查引報告都由統(tǒng)一的模板生成,保證了報告格式的統(tǒng)一性和內容的完整性。報告的內容及格式特點主要有:
1)報告內容分為3部分:封面、附件一、附件二,每部分都有獨立的格式。封面只有1頁,附件一和附件二如果內容過長會有多頁,但附件一和附件二頁腳的頁碼都是獨立編號,都從1開始,如附件二第1頁頁腳顯示為“(附件二)第1頁,共1頁”。
2)封面左上角是當前報告的編號信息,如“檢索編號:JS120170001”。本檢索編號同時出現(xiàn)在附件一和附件二的頁眉位置,附件一和附件二的頁眉信息對應是“教育部科技查新工作站Z06山東大學圖書館檢索編號JS120170001”。
3)封面主體部分顯示委托人、委托單位、檢索內容、檢索數(shù)據(jù)庫、檢索結果,底部顯示檢索人、檢索單位、檢索日期。
4)附件一顯示被檢文獻列表。橫線下“委托人發(fā)表文章的收錄情況列表”是頁眉的一部分。被檢文獻列表按照索引數(shù)據(jù)庫分組顯示,如本示例中,先顯示“以下為張三論文被SCI-E收錄情況”,跟著是3篇SCI-E文章,再后面是分組二“以下為張三論文被Ei Compendex收錄情況”。每組的文章都從1開始單獨編號。
5)附件二是檢索到SCI-E文章所發(fā)表期刊的JCR詳細指標信息。主體部分按“期刊/年代”逐條顯示,表頭顯示期刊名、ISSN、參考年、參考年影響因子,然后以表格形式列出了期刊指定年份的各類影響因子指標。如果被檢文獻沒有被SCI-E收錄,報告就沒有附件二,只有封面和附件一。
1.2自動生成PDF報告的技術關鍵點分析
根據(jù)以上分析,山東大學的查收查引報告,雖然內容繁多、格式嚴格,但又有一定的規(guī)律性。根據(jù)格式上的規(guī)律特點,應用計算機軟件自動生成PDF報告是可行的。以下是幾個需要重點解決的技術關鍵點:
1)封面只有1頁,顯示內容的位置相對固定。而附件二和附件三隨著內容增加會有很多頁,而且有著不同于封面的頁眉和頁腳。如何設計模板同時生成這3類內容的頁面,是需要首先解決的難題。
2)封面主體部分主要顯示委托人、委托單位、檢索內容、檢索數(shù)據(jù)庫、檢索結果。如果檢索內容的詳細內容過長就會自動換行,導致下面檢索數(shù)據(jù)庫標題和內容的位置也需要跟著下移。同理,如果檢索數(shù)據(jù)庫內容過長出現(xiàn)換行,也會導致后面檢索結果位置下移。如何檢測內容過長會出現(xiàn)換行,并定位下面行的顯示坐標,也是本系統(tǒng)的難點。
3)附件內容的生成。附件一先按索引數(shù)據(jù)庫分組,然后分篇顯示被檢文獻詳細內容。附件二按“期刊/年代”逐項顯示,以表格形式顯示期刊某一參考年份的影響因子指標。嚴格的格式要求,給設計報表模板帶來不小的技術難度。
2系統(tǒng)的總體設計
2.1運行環(huán)境及系統(tǒng)架構
考慮到檢索員眾多、檢索員辦公地點分散、系統(tǒng)升級維護方便、檢索報告便于統(tǒng)一存檔管理等因素,山東大學的查收查引報告管理系統(tǒng)采用B/S架構(即瀏覽器/服務器模式),檢索員和委托人通過客戶端電腦安裝的瀏覽器直接訪問系統(tǒng),實現(xiàn)各類操作。
為提高整個系統(tǒng)的擴展性、可維護性和健壯性,在設計軟件框架時我們采用了流行的三層架構體系,將整個軟件系統(tǒng)分為表現(xiàn)層、業(yè)務層、數(shù)據(jù)層[6]。如圖2所示,自動生成PDF報告模塊位于中間的業(yè)務層。操作員通過表現(xiàn)層界面調用PDF報告生成模塊,生成模塊通過數(shù)據(jù)層的數(shù)據(jù)訪問適配器從數(shù)據(jù)庫里調用已保存好的委托人姓名、檢索結論、檢索文章列表等信息,自動在服務器上生成PDF格式的查收查引報告文檔,并歸檔保存在服務器上指定目錄下。檢索員打印報告時,根據(jù)系統(tǒng)生成的加密鏈接從服務器上調取查收查引報告,報告調取到客戶機緩存后可以打開預覽,確認無誤后打印交付給委托人。
2.2報表生成軟件的選擇
為了簡化部署、提高系統(tǒng)的擴展性,本系統(tǒng)采用Visual Studio 2012作為開發(fā)平臺,C#作為開發(fā)語言,Sql Server 2008作為后臺數(shù)據(jù)庫。在報表軟件的選擇上,本系統(tǒng)最終選用了水晶報表來實現(xiàn)PDF格式查收查引報告的自動生成,主要考慮到水晶報表有以下優(yōu)點:
1)水晶報表是業(yè)內最專業(yè)、功能最強的報表系統(tǒng)。它不僅具有強大的報表功能,還實現(xiàn)了與絕大多數(shù)流行開發(fā)工具的集成和接口,特別是Visual Studio[7]。本系統(tǒng)使用的Crystal Report 13.0.5版本,可以很好地集成到開發(fā)環(huán)境Visual Studio 2012內,具有強大、高效、集成等優(yōu)勢。
2)水晶報表提供了強大的報表設計工具Crystal Report Designer,具有數(shù)據(jù)可視化和分析功能。在數(shù)據(jù)控制方面,提供了拉模式(Pull Model)和推模式(Push Model)兩種方式[8]。拉模式是由水晶報表模板(引擎)直接從數(shù)據(jù)庫里拉取數(shù)據(jù),可以用來顯示報告編號、檢索人、檢索日期等固定信息;推模式由應用程序從數(shù)據(jù)庫獲取數(shù)據(jù),經(jīng)過數(shù)據(jù)處理后再把數(shù)據(jù)推送給水晶報表引擎,可以用來分組顯示檢索文章列表等這些復雜的內容。
3)水晶報表能夠穩(wěn)定、高效、動態(tài)地將報表導出成為.pdf、.doc、xls、html、rtf等多種格式。本系統(tǒng)借助水晶報表將查收查引報告導出為PDF格式的文檔,并保存在服務器上。
3水晶報表在線生成PDF格式報告的關鍵技術
3.1報表模板的設計及打印
在報表開發(fā)工作中,首先要確定報表的種類和格式,然后針對性的制作一個報表模板,模板主要包含要打印的數(shù)據(jù)和顯示格式。如前面所述,查收查引報告的內容包含封面、附件一和附件二這三部分內容,這三部分在內容、格式、顯示數(shù)據(jù)上差別很大。要想在一個報表模板上顯示這三部分,實現(xiàn)起來難度很大。
為解決這一難題,本系統(tǒng)開發(fā)時創(chuàng)建了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控件,控件的賦值可以采用拉模式直接從數(shù)據(jù)庫里拉取數(shù)據(jù),也可以在程序代碼里通過控件名稱直接賦值,給顯示證明編號的文本控件txtPdfNo在程序里賦值時的核心代碼如下:
∥臨時表dtList內保存了當前查收查引記錄的申請人、編號等基本信息
txtPdfNo.Text=dtList.Rows[0][″PDFNO″].ToString();
封面主體部分顯示委托人、委托單位、檢索內容、檢索數(shù)據(jù)庫、檢索結果。如果采用Text Object控件顯示各項的標題和內容,模板設計時各項的顯示坐標是固定的,不會隨著內容的換行自動調整。為解決這一難點,本系統(tǒng)在數(shù)據(jù)庫里建立數(shù)據(jù)表RetrievePMain,列標題和內部初始數(shù)據(jù)如表1所示。
在“字段資源管理器”的“數(shù)據(jù)庫字段”上按右鍵,選擇“數(shù)據(jù)庫專家”,建創(chuàng)建新連接,從OLE DB(ADO)下選擇Microsoft OLE DB Provider for Sql Server,一步步操作,最后選擇表RetrievePMain。最后回到“字段資源管理器”界面,將字段Title和Cont分別拖到Cover.rpt模板文件Section3(Details)節(jié)內,并調整顯示位置和顯示格式,實現(xiàn)顯示數(shù)據(jù)的綁定[9]。數(shù)據(jù)庫內,Cont字段內容是空的,沒有保存數(shù)據(jù),數(shù)據(jù)在打印時由程序根據(jù)要顯示的具體報告在臨時表dtPMain內動態(tài)生成。核心代碼如下:
3.3附件頁水晶報表模板的制作
附件一用來分組打印被檢文獻列表,打印時先按照被收錄數(shù)據(jù)庫分組,報表設計界面如圖4所示。設計時和前面設計封面模板的步驟相似,先在字段管理器內將表RetrievePList加載進來。然后在空白位置點右鍵,彈出窗口內選擇Report-Group Export,打開分組設計向導,將表RetrievePList的INDEXGNAME字段添加到右邊選擇框內,實現(xiàn)打印列表按照收錄數(shù)據(jù)庫名分組[10]。最后將被檢文獻序號ID和文獻內容DETAILS拖到報表設計器Section3(Details)節(jié)內,并調整位置和顯示格式。
附件一顯示格式和內容都有嚴格要求,數(shù)據(jù)庫內直接拉取的數(shù)據(jù)不能完全滿足顯示要求,因此需要采用推模式顯示被引文獻列表,具體步驟和封面主體內容生成步驟類似,先將數(shù)據(jù)加載到臨時表dtArticle,然后根據(jù)顯示要求修改dtArticle內的數(shù)據(jù),最后綁定報表模板輸出。表dtArticle的INDEXGNAME字段表示文獻顯示時的組標題,代碼處理時逐行遍歷表dtArticle內記錄,按照要求修改INDEXGNAME的值,核心代碼如下:
代碼內strAuthorName表示委托人姓名,dtArticle.Rows[i][″INDEXNAME″].ToString()表示當前文獻被索引數(shù)據(jù)庫的名稱,如本例第一篇文獻的INDEXGNAME會賦值成“以下為張三淪為被SCI-E收錄情況:”。
附件二用來顯示SCI-E收錄文獻的期刊的詳細影響因子列表。報表設計時直接采用拉模式綁定數(shù)據(jù)表RetrievePIF,然后拖動要顯示的字段到報表設計器上。
4結語
本文開發(fā)的基于水晶報表的查收查引報告自動生成系統(tǒng),已經(jīng)正式應用到山東大學的查收查引管理系統(tǒng)。經(jīng)過1年多的使用,系統(tǒng)運行穩(wěn)定,并根據(jù)檢索員的使用建議不斷優(yōu)化。經(jīng)過對比測試,檢索員錄入數(shù)據(jù)由系統(tǒng)在線自動生成PDF文檔,與檢索員將數(shù)據(jù)拷貝到WORD模板內排版并生成PDF文檔相比較,采用系統(tǒng)能平均節(jié)省2/3以上的時間。而且,采用系統(tǒng)自動生成PDF報告,具有準確度高、格式統(tǒng)一、自動在服務器集中存檔等優(yōu)點。本系統(tǒng)基于水晶報表自動生成PDF格式文檔,也可以應用到查新報告工作中,根據(jù)輸入項自動生成PDF格式的查新報告。
同時我們也能發(fā)現(xiàn),最終報告的格式和顯示的內容,直接依賴制作的報表模板文件。顯示信息項、顯示格式、及輔助的表格線等信息都固定在報表模板上,難以靈活變動和增刪。這一不足制約了后期報告格式的修改,更不利于在其它檢索單位推廣。如何進一步開發(fā)本系統(tǒng),允許用戶根據(jù)本單位查收查引報告的格式要求,通過圖形化界面自定義報表模板,靈活修改報表模板顯示的信息項、顯示格式、顯示位置等內容,是值得進一步研究的地方。
參考文獻
[1]梁紅妮,胡小飛.論文查收查引服務的分析與探討[J].情報理論與實踐,2009,(4):96-99.
[2]戰(zhàn)玉華,程愛平,錢俊雯,等.代檢代查服務系統(tǒng)的開發(fā)及應用[J].圖書情報工作,2005,(11):75-77,55.
[3]王學勤,郝丹,鄭菲,等.“查收查引報告自動生成系統(tǒng)”應用實踐研究[J].圖書情報工作,2014,(16):131-137.
[4]侯瑞芳,陳嘉勇,周婕.查收查引服務優(yōu)化體系的構建與思考[J].圖書館建設,2015,(4):75-79.
[5]胡榮磊,左良,蔣華.PDF版式文檔在電子簽章系統(tǒng)中的應用與實現(xiàn)[J].信息技術,2016,(4):64-68.
[6]密君英.基于三層架構的ASP.NET項目實戰(zhàn)教程[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].計算機技術與發(fā)展,2013,(6):219-222,226.
[9]王華杰,李律松,孫一波.精通C#數(shù)據(jù)庫開發(fā)[M].北京:清華大學出版社,2004:107-108.
[10]郭琦.Visual Basic數(shù)據(jù)庫系統(tǒng)開發(fā)技術[M].北京:人民郵電出版社,2003:221-222.