宋詠春
摘要:隨著試題庫系統(tǒng)在學(xué)校教學(xué)工作中的使用日漸普及,在試題庫的運(yùn)行維護(hù)管理過程中,試題庫的試題錄入及修改編輯成為提高試題庫運(yùn)行效率的主要研究內(nèi)容之一。本文以DSOframer、Spire.Doc for .NET控件為主要工具,提出并實(shí)現(xiàn)了B/S架構(gòu)試題庫系統(tǒng)試題錄入及修改編輯的一種方法,通過比較簡潔的操作實(shí)現(xiàn)將Word文檔中包含圖片、表格、數(shù)學(xué)公式的試題導(dǎo)入數(shù)據(jù)庫及對試題庫中試題的修改編輯,從而提高試題庫維護(hù)的效率。
關(guān)鍵詞:B/S架構(gòu);試題庫;DSOframer;Spire.Doc for .NET
中圖分類號:G434 ?文獻(xiàn)標(biāo)識碼:A ?論文編號:1674-2117(2021)23-0082-04
本文引言
隨著信息技術(shù)的發(fā)展,試題庫系統(tǒng)的設(shè)計(jì)與開發(fā)成為很多學(xué)校建立完備的考試體系,實(shí)現(xiàn)考試工作標(biāo)準(zhǔn)化、科學(xué)化以及信息化,以實(shí)施教考分離、提高教學(xué)質(zhì)量、規(guī)范教學(xué)的重要舉措。不過,試題庫的建設(shè)是一個(gè)長期的過程,在使用過程中,隨著教學(xué)要求的改變,要求逐漸推陳出新,適時(shí)增加時(shí)效性題目;試題庫已錄入的試題若發(fā)現(xiàn)存在問題,要及時(shí)修改和更正。如何高效、快速地在試題庫中錄入新試題以及修改原有的試題,實(shí)現(xiàn)試題庫系統(tǒng)的動(dòng)態(tài)維護(hù),是試題庫設(shè)計(jì)和建設(shè)所要考慮的一個(gè)重要問題。
當(dāng)前使用的很多試題庫系統(tǒng)采用以ASP.Net技術(shù)開發(fā)前臺頁面、以SQLServer為后臺數(shù)據(jù)庫的B/S架構(gòu)形式,開發(fā)、維護(hù)簡單,既可以生成導(dǎo)出傳統(tǒng)的紙質(zhì)試卷,也可以使用瀏覽器實(shí)現(xiàn)在線考試,應(yīng)用比較廣泛。這種B/S架構(gòu)試題庫系統(tǒng)的試題如果采用逐題錄入及維護(hù),大多數(shù)是通過Web富文本編輯器實(shí)現(xiàn),這種錄入及修改方法比較適合純文本試題,如果試題中包含數(shù)學(xué)公式、表格或圖片,進(jìn)行圖文混排內(nèi)容的錄入及修改在操作上就比較煩瑣。對于B/S架構(gòu)下,圖文混排內(nèi)容快速錄入試題庫的研究,目前采用的應(yīng)對方法,一是以Word文檔為導(dǎo)入數(shù)據(jù)源,在要導(dǎo)入的Word文檔中設(shè)置標(biāo)簽,通過程序提取圖片、表格及公式等對象,與文本內(nèi)容分離,然后分別存儲在試題庫數(shù)據(jù)庫的不同類型字段,進(jìn)而將文本與公式、表格及圖片分開存儲[1];二是采用ActiveX控件,將包含數(shù)學(xué)公式、表格或圖片的試題分開錄入到Word文檔,或通過設(shè)置書簽的方式分割為新的Word文檔,然后以二進(jìn)制數(shù)據(jù)存儲到試題庫數(shù)據(jù)庫[2][3],實(shí)現(xiàn)試題內(nèi)容的排版與輸出組卷的格式一致。上述快速錄入方法要求事先將Word文檔的題干和選項(xiàng)等作標(biāo)記或必須按指定的格式先修改好,格式不能出錯(cuò),否則導(dǎo)入就會(huì)失敗。而且該方法主要是解決試題錄入的問題,并沒有解決對試題庫中的試題進(jìn)行快速瀏覽及修改維護(hù)的問題。
本文對B/S架構(gòu)下,Word文檔中的試題導(dǎo)入試題庫及對試題修改編輯的方法進(jìn)行研究,提出用ASP.NET技術(shù)進(jìn)行B/S架構(gòu)試題庫系統(tǒng)錄入及修改維護(hù)的一種實(shí)現(xiàn)方法。試題庫系統(tǒng)使用者可以在客戶端瀏覽器界面上通過DSOframer控件對已經(jīng)包含題目及答案的現(xiàn)成Word文檔進(jìn)行普通選取操作,就可以將含圖、文、表格及數(shù)學(xué)公式等的試題內(nèi)容快速錄入到試題庫數(shù)據(jù)庫;同時(shí)也可以通過客戶端瀏覽器快速瀏覽試題庫中試題的具體內(nèi)容,選擇需要修改的試題,在瀏覽器的Word界面下進(jìn)行修改,與對Word文檔的操作方式一致,人機(jī)界面友好,排版格式易控制,有利于提高試題庫系統(tǒng)的維護(hù)效率。
本文策略研究
1.試題庫中試題的存儲策略
試題庫的試題內(nèi)容需要不斷添加,目前,在網(wǎng)絡(luò)上有很多教學(xué)資源站點(diǎn),可以搜索下載適合的試題,導(dǎo)入試題庫使用,這是錄入新試題比較便捷的一種方式。Word文檔是大多數(shù)試題文檔所使用的文檔形式,從網(wǎng)上下載的Word文檔試題排版格式各不相同,由于新試題往往是根據(jù)試卷格式的要求錄入的,所以在Word文檔中要適當(dāng)編輯處理后再導(dǎo)入到試題庫的數(shù)據(jù)庫中。
對于包含文本、圖、表的試題主要內(nèi)容在試題庫數(shù)據(jù)庫中的存儲,在現(xiàn)有技術(shù)條件下,如果把試題文本部分與試題相關(guān)的圖、表分開存儲,試題文本與圖、表的位置關(guān)系難以獲取并記錄,在導(dǎo)出試題時(shí),試題圖文混排的效果就會(huì)與原來的導(dǎo)入試題時(shí)的排版效果完全不同,導(dǎo)致系統(tǒng)完成自動(dòng)組卷并導(dǎo)出為Word文檔后用戶還需進(jìn)行大量的排版操作。解決上述問題的可行方法是在不破壞原有文本編排格式及圖文布局的前提下將Word文檔內(nèi)容編排后(含圖、表)以二進(jìn)制數(shù)據(jù)類型存儲在數(shù)據(jù)庫中,導(dǎo)出時(shí)將二進(jìn)制數(shù)據(jù)解析成Word文檔,可以保持與原輸入排版一致的格式。因此,在試題庫數(shù)據(jù)庫中設(shè)置二進(jìn)制數(shù)據(jù)類型字段存儲導(dǎo)入試題及答案Word文檔的數(shù)據(jù);同時(shí)考慮到試題管理的要求,把試題及答案的Word文檔轉(zhuǎn)換為圖片,通過圖片實(shí)現(xiàn)在瀏覽器上對試題庫內(nèi)容的瀏覽,將存放試題和答案圖片的字段類型設(shè)置為圖像數(shù)據(jù)類型;為方便檢索和查重試題,設(shè)置一個(gè)文本類型字段存儲試題的文本內(nèi)容。
2.試題庫試題錄入及維護(hù)的實(shí)現(xiàn)策略
本方法的試題錄入是針對已有Word文檔中的試題逐題導(dǎo)入試題庫提出的,同時(shí)實(shí)現(xiàn)從試題庫中導(dǎo)出試題進(jìn)行編輯修改。從易用性和使用界面友好的設(shè)計(jì)角度而言,這些Word文檔考慮在客戶端的瀏覽器網(wǎng)頁中打開,然后在網(wǎng)頁中進(jìn)行錄入及修改等操作。DSOframer是微軟提供的一款開源的用于在線編輯Word、Excel、PowerPoint的ActiveX控件,基于本地Office組件運(yùn)行,提供了標(biāo)題欄、菜單欄及工具欄等用戶界面接口,在ASP.NET頁面中嵌入此控件,就可以在基于IE內(nèi)核的瀏覽器網(wǎng)頁上構(gòu)建嵌入式文檔瀏覽器和編輯器,在網(wǎng)頁上導(dǎo)入Word文檔內(nèi)容,實(shí)現(xiàn)查看、編輯和保存試題內(nèi)容。本文采用該控件實(shí)現(xiàn)試題庫試題錄入及維護(hù)。[4]
在試題錄入設(shè)計(jì)時(shí),考慮到試卷組卷及瀏覽試題的需要,可以將試題題目與答案分開存放在單獨(dú)的Word文檔,同時(shí)把Word文檔轉(zhuǎn)換為圖片,如果在ASP.NET中自行編寫代碼實(shí)現(xiàn)上述操作,難度是相當(dāng)大的。而Spire.Doc for .NET是一款專門對Word文檔進(jìn)行操作的.NET類庫,作為獨(dú)立的Word.NET控件,可以將Microsoft Word文檔的操作功能集成到.NET應(yīng)用程序中,筆者使用Spire.Doc for .NET控件方便地實(shí)現(xiàn)了Word文檔的分割及轉(zhuǎn)換成圖片。[5]
本文試題導(dǎo)入及修改維護(hù)的具體實(shí)現(xiàn)
1.打開Word文檔并選取試題導(dǎo)入
從試題庫維護(hù)的要求來說,一個(gè)現(xiàn)成的Word文檔中的試題不可能全都錄入試題庫,最常見的操作是把經(jīng)過試題庫管理人員篩選的適合的試題逐一導(dǎo)入。操作過程為:在客戶端的瀏覽器網(wǎng)頁打開一個(gè)Word試題文檔,依次選擇試題、答案內(nèi)容,程序?qū)⑸鲜鰞?nèi)容復(fù)制到一個(gè)新的Word文檔,然后提交到試題庫數(shù)據(jù)庫,具體流程如圖1所示。
試題導(dǎo)入流程的關(guān)鍵技術(shù):
(1)程序?qū)υ囶}的題干和答案內(nèi)容的復(fù)制是通過DSOframer控件完成的,DSOframer控件通過JavaScript腳本實(shí)現(xiàn)對文檔的操作,然后用Selection.Copy()方法完成題干和答案的復(fù)制。這里把題干和答案分開錄入,目的是使題干與答案之間,通過由代碼自動(dòng)生成的一個(gè)特殊標(biāo)識進(jìn)行分隔,從而方便后續(xù)操作。通過Selection.Paste()方法把題干和答案粘貼到新建立的Word文檔,在粘貼答案時(shí),使用Selection.InsertBreak()方法在答案之前自動(dòng)實(shí)現(xiàn)特殊標(biāo)識的添加。
(2)DSOframer控件提供的HttpAddPostCurrFile()方法,可以把客戶端編輯的文件直接提交到服務(wù)器端,該方法的實(shí)現(xiàn)過程是:先把編輯的文件保存到客戶端的一個(gè)臨時(shí)文件夾,然后把文件上傳到服務(wù)器端,文件上傳完畢后刪除臨時(shí)文件夾中的文件。由于DSOframer控件自身的問題,如果客戶端安裝的Office版本比較高,在使用HttpAddPostCurrFile()方法上傳文件之前,編輯的Word文檔就會(huì)無法自動(dòng)保存到臨時(shí)文件夾,從而使上傳到服務(wù)器端的文件為0字節(jié)文件。這個(gè)問題的處理方法是:把編輯的文檔用程序指令直接存入臨時(shí)文件夾,再使用HttpAddPostCurrFile()方法實(shí)現(xiàn)上傳。
(3)包含試題題干和答案的文檔上傳到服務(wù)器端文件夾后,用Spire.Doc for .NET控件根據(jù)文檔中的特殊標(biāo)識,分別讀取試題題干和答案到不同的Word文檔保存,實(shí)現(xiàn)文檔的分割。
(4)對于分割后的Word文檔,可以使用Spire.Doc for .NET控件的SaveToImages()方法轉(zhuǎn)化為jpg格式圖片。Spire.Doc for .NET控件把Word文檔按頁面轉(zhuǎn)換為圖片,轉(zhuǎn)換生成的圖片邊框有大量空白,在網(wǎng)頁上顯示時(shí),浪費(fèi)大量空間,也會(huì)增加圖片文件的大小。因此在ASP.NET程序中設(shè)置一個(gè)函數(shù),把轉(zhuǎn)換后圖片的多余白邊剪除,使網(wǎng)頁上的圖片只顯示試題題干和答案內(nèi)容,也減小了圖片文件的大小。
2.試題庫中試題的修改編輯
試題庫試題修改編輯的流程如圖2所示。
試題編輯修改流程的關(guān)鍵技術(shù):
(1)從數(shù)據(jù)庫讀取的試題題干和答案二進(jìn)制數(shù)據(jù),在服務(wù)器文件夾生成題干和答案的Word文檔,再用Spire.Doc for .NET控件合并為一個(gè)Word文檔,合并時(shí)自動(dòng)在題干與答案之間插入一個(gè)由代碼生成的特殊標(biāo)識。
(2)DSOframer控件提供Open()方法,可以直接在客戶端打開服務(wù)器端的Word文檔。
本文實(shí)現(xiàn)實(shí)例
在大學(xué)本科階段,力學(xué)課程是眾多工科專業(yè)的重要核心基礎(chǔ)課。不同工科專業(yè)的力學(xué)課程的學(xué)習(xí)要求不一樣,在期末考試時(shí),要求教師根據(jù)學(xué)習(xí)內(nèi)容的不同,提供多套試題以滿足考核要求。試題庫系統(tǒng)的建立為滿足力學(xué)課程考試的要求提供了很大的方便,但是,力學(xué)試題的主要特點(diǎn)是公式多、圖形多,相當(dāng)多的B/S架構(gòu)試題庫系統(tǒng)采用的Web富文本編輯器在力學(xué)試題公式及圖形的錄入、修改方面并不方便。筆者利用本文方法所構(gòu)建的試題導(dǎo)入及編輯修改模塊,其運(yùn)行效果如圖3、圖4、圖5所示。
試題的錄入、編輯修改都是在Word界面下進(jìn)行,用戶不需要花時(shí)間適應(yīng)即可操作,從而提高試題庫的維護(hù)效率。
本文總結(jié)
本文給出了在ASP.NET中使用DSOframer控件實(shí)現(xiàn)包含文本、圖、表的試題導(dǎo)入試題庫、瀏覽及修改編輯的方法,用簡單方便的操作完成試題庫試題內(nèi)容錄入、瀏覽和修改編輯,實(shí)現(xiàn)了組卷后與原來的排版格式保持一致,為試題庫中試題的錄入、瀏覽及修改維護(hù)提供了一種有效途徑,該方法的可行性已在實(shí)踐中得到驗(yàn)證。
參考文獻(xiàn):
[1]周虎.一種基于C#中將Word試題導(dǎo)入數(shù)據(jù)庫的實(shí)現(xiàn)方法[J].電腦知識與技術(shù),2016,12(35):8-10.
[2]鄧永海,鄧梅,李朝榮.ASP.NET中將Word試卷逐題導(dǎo)入數(shù)據(jù)庫的實(shí)現(xiàn)方法[J].計(jì)算機(jī)與現(xiàn)代化,2010(12):152-154.
[3]張娟,范琪,毛子良,等.基于B/S模式下的圖文混排技術(shù)的研究[J].云南大學(xué)學(xué)報(bào):自然科學(xué)版,2010,32(S1):364-367.
[4]微軟.Office對象庫參考[EB/OL].[2020-7-10].https://docs.microsoft.com/zh-cn/office/vba/api/overview/library-reference/reference-object-library-reference-for-office.
[5]冰藍(lán)科技.Spire.Doc for .NET中文教程[EB/OL].[2020-8-10].https://www.e-iceblue.cn/spiredoc/spire-doc-for-net-program-guide-content.html.