引 言
在高等學校里,畢業生信息的管理、畢業證書和學位證書的打印是教務管理的重要環節,本文就結合 Re-portObject(s報表對象)在 VFP 中實現了本校畢業證和學位證打印,在近幾屆的本、??飘厴I生的畢業證、學位證的打印中得到了實際測試與應用,程序可根據證書的尺寸和內容實現打印對象屬性的可視化調整,簡化了工作人員證書打印的操作步驟,提高了工作效率。
1 系統需求分析
隨著計算機應用的不斷普及,現高校均采用高校學生學籍管理系統為進校的學生學籍建立電子檔案,對學生在校的學習情況進行全程的跟蹤與管理。學校所使用的學籍管理系統能實現對學生的基本情況、學習成績、學分等信息的動態查詢、管理與報表輸出,極大地方便了教務管理人員,該系統主體功能運行良好,但有一處功能不甚完善,即:無法實現畢業證、學位證的批量自動打?。ㄔ到y在批量打印時,每打印一份證書,必須先手動確認后打印才會繼續),因此,本應用對該處做專項功能擴充開發。
2 系統功能模塊設計
程序實現的功能模塊如圖 1 所示,具體描述如下:
(1)學籍信息的導入。原學籍管理系統中有學生基本信息導出的功能,可直接將數據導入使用,對原始畢業生信息數據的導入,可避免對學生基本信息的重新錄入,有效地保證與原學籍系統中數據一致。(2)基本信息的查詢??蛇x擇在本?;蚵摵限k學點對即將畢業的學生進行查詢,支持按學號模糊查找,對查詢結果可按連續選擇、非連續選擇或拖動選擇等多種選擇方式確定待打印證書的學生。
(3)打印格式的設置。打印格式設置中可以對需在證書中打印的項目如姓名、性別、出生年份、出生月份、畢業年份、畢業月份、畢業專業、畢業學校,證書編號等進行選擇,對打印項進行字體、字號、字形、阿拉伯數字的大寫或小寫等格式的設置,打印項的距頂端、距左端的位置的設置,打印項整體位置的移動,證書頁面尺寸的設置,提供了打印設置的保存與還原等功能。畢業證書打印格式的設置界面如圖 2 所示。
(4)分類批量打印??梢赃x擇待打印證書的類型是證書畢業證還是學位證,可以按證書編號的選擇方式打印本校與聯合辦學點中的所有學生、查詢中選擇的學生、指定編號范圍等多種批量打印方式,也可以按學院專業打印方式批量打印。
(5)打印報表的動態生成。根據打印項的各種格式設置和分類批量打印中確定的打印范圍,動態生成打印報表,可以支持直接打印或打印預覽等證書打印方式。
3 系統的實現及關鍵技術
系統實現的主界面如圖 3 所示,整個應用實現涉及到的關鍵技術為打印報表的動態生成,Report Ob-jects為編程人員提供了一種以編程的方式建立報表的方法,它融入了面向對象程序設計的方法和特點,將報表的創建、設計等操作全部封裝在報表對象類(SFREPOBJ.VCX 類庫) 中,該報表對象類由 DougHennig 設計和開發,提供了一系列建立報表對象集的方法和相關屬性,開發人員不必關心其內部如何實現就可以根據項目的需要通過編程的方式靈活地將其應用到實際項目的開發中。其動態生成打印報表的流程和部分代碼如下:
3.1 建立報表控件,設置報表全局屬性
對 Report Objects 中 SFReportFile 類進行實例化,設置報表的默認字體、字體大小、報表中的列數、單位大小、報表文件的名稱等全局屬性。
實例化 SFReportFile 類、設置報表的全局屬性的相關代碼如下:
loReport=NEWOBJECT\\('SFReportFile', 'SFREPOBJ'\\) && 建立控件
loReport.cReportFile=“ReportName_frx” && 設 置 文件名
loReport.lSummaryBand=.F. && 不要概要帶
loReport.cUnits="I" && 單位英寸
loReport.nLeftMargin=0 && 設置左邊的空白欄
3.2 返回指定報表帶的對象,設置其屬性
調用 SFReportFile 類中 GetReportBand\\(\\)方法返回一個由入口參數指定報表帶的對象,入口參數可以是 Page Header(頁標頭帶)、Detail(細節帶)、PageFoote(r頁腳注帶)等,通過返回的對象訪問指定的帶,這樣你便可以設置其屬性或向其中添加對象\\(如字段或線條\\),代碼如下:
* 設置頁標頭,頁標頭 在控件中自動生成,設置高度為 0
loPageHeader = loReport.GetReportBand \\('Page Header'\\)&& 頁標頭帶對象
loPageHeader.nHeight = 0loDetail = loReport.GetReportBand\\('Detail'\\) && 細節帶對象
loDetail.nHeight =ReportMainSetup.pg_height/2.54 && 將ReportMainSetup 表中 ReportMainSetup 字段的值厘米轉換為英寸
loPageFooter = loReport.GetReportBand\\('Page Footer'\\) && 頁腳注對象
loPageFooter.nHeight = 0
3.3 對細節帶添加對象
Report Bands 類提供的 ADDITEM()方法為添加一個對象到一個報表帶中,當入口參數為”Field”時,返回值類型為 SFReportField,SFReportField 類的全局屬性如表 1 所示。
向細節帶添加的代碼如下:
*ReportDetailSetup 為保存報表設置的表
*tempReportData 為根據證書要打印的字段將畢業學生信息表提取后生成的臨時表
strFieldName="tempReportData."+ALLTRIM\\(ReportDe-tailSetup.Print_Item\\)
strFontName=ALLTRIM\\(ReportDetailSetup.fontname\\)
strFontSize=ALLTRIM\\(ReportDetailSetup.FontSize\\)
strFontStyle=ALLTRIM\\(ReportDetailSetup.FontStyle\\)
loObject = loDetail.ADDITEM\\('Field'\\)
loObject.cExpression = "&strFieldName"
loObject.cFontName = strFontName
oObject.nFontSize = VAL\\(strFontSize\\)
loObject.nHPosition = ReportDetailSetup.h_Position/2.54+PgLeft
loObject.nVPosition = ReportDetailSetup.v_Position/2.54+Pg-Top
loObject.nWidth = loReport.GetHValue\\(LEN\\(&strFieldName\\) ,loObject\\)
loObject.cAlignment=ICASE \\(ReportDetailSetup.printalign=1,"left",ReportDetailSetup.printalign=2,"right",ReportDetailSetup.printalign=3,"center"\\)
loObject.lFontItalic=IIF\\(" 斜 "$ALLTRIM\\(strFontStyle\\),.T.,.F.\\)
loObject.lFontBold=IIF\\(" 粗 "$ALLTRIM\\(strFontStyle\\),.T.,.F.\\)
3.4 生成報表文件,打印報表
調用實例化 SFReportFile 類中的 Save\\(\\)方法,生成由 cReportFile 屬性指定命名的報表文件,執行VFP 中的 REPORT FORM 命令實現報表打印或預覽,代碼如下:
loReport.Save\\(\\)
IF IsPrintOrPreview=1 && 直接打印
REPORT FORM &strReportName_frx. NOCONSOLE ALL TO PR IN TER PROMPT
ELSE && 預覽
REPORT FORM &strReportName_frx. PREVIEW ALL TOPRINTER PROMPT
END IF
loReport.Release\\(\\)
4 結束語
本文在 VFP 中應用 Report Objects 實現了高校畢業證學位證打印,較基于 WORD 的郵件合并打印證書、基于 VB 的報表打印和基于 VFP 中直接報表打印,其界面友好、可交互性較強,實現了打印對象的可視化調整,提高了教務管理工作者的工作效率,文中結合代碼分析了 Report Objects 實現報表動態打印的開發方法及步驟,可結合不同行業應用(如各類票據的打?。┘右酝茝V,實現更多更靈活的應用?!緢D略】
參考文獻:
[1] Doug Hennig . Report Object [J/OL]. 2009-10-12.
[2] 楊憲澤,劉玉萍.軟件技術與程序設計(Visual FoxPro 版)[M].北京:清華大學出版社,2010.
[3] 甕正科.Visual FoxPro 8 數據庫開發教程[M].北京:清華大學出版社,2005.