摘要:編輯器是Web應(yīng)用中常見的一個(gè)功能,但普通的在線編輯功能有限。因此,本文提出采用客戶端編輯器自動(dòng)調(diào)用Microsoft Word軟件,利用Word強(qiáng)大的文字處理功能,解決編輯器中特殊字符處理、圖文混排等難題,并以試題庫管理系統(tǒng)中試題錄入為例,介紹了基于Word的客戶端編輯的技術(shù)實(shí)現(xiàn)。
關(guān)鍵詞:編輯器;Word;客戶端編輯器
1 引言
網(wǎng)絡(luò)應(yīng)用中,編輯器是一個(gè)非常重要的功能。大家最常見的就是在線編輯器,它能實(shí)現(xiàn)簡單的文本錄入與編排。對(duì)于字符特殊、編排要求高的應(yīng)用,如基于web的大型的公文流轉(zhuǎn)系統(tǒng)、試題庫管理系統(tǒng)等,常見的在線編輯器難以完成任務(wù),往往采用客戶端編輯器來實(shí)現(xiàn),但開發(fā)一套獨(dú)立的客戶端編輯器,功能往往有限,而Microsoft Word是目前最好的編輯工具,因此我們提出用Microsoft Word作為編輯器。但在IE中,Word不可能直接應(yīng)用,需要一個(gè)載體來調(diào)用Word軟件。本文以題庫管理系統(tǒng)中試題的錄入、編輯及試卷的輸出為例分析基于Word的客戶端編輯器的實(shí)現(xiàn)。
2客戶端編輯器的結(jié)構(gòu)[1][2]
由于題庫系統(tǒng)最終需要編輯包含數(shù)學(xué)公式等特殊符號(hào)的試題并存入題庫,并且試題還需要組合成試卷,并輸出word文檔,這些功能在普通的IE下用\"在線編輯器\"是無法實(shí)現(xiàn)的,因此需開發(fā)客戶端編輯器,用戶安裝客戶端編輯器后才能實(shí)現(xiàn)試題編輯/存儲(chǔ)、批量導(dǎo)入以及將試卷輸出為word文檔等功能。
客戶端編輯器在結(jié)構(gòu)上主要包括三個(gè)部分,如下圖所示。一部分是實(shí)現(xiàn)客戶端編輯器所需的各項(xiàng)功能的Theoleditor;另一部分是IE瀏覽器的BHO,用來使IE瀏覽器在訪問服務(wù)器,進(jìn)行編輯試題、批量導(dǎo)入和生成word試卷等功能時(shí)啟動(dòng)Theoleditor;最后一部分位于服務(wù)器端,用來接受Theoleditor上傳的各種文件和信息。
3客戶端編輯器的實(shí)現(xiàn)[3][4][5]
客戶端編輯器(Theoleditor)實(shí)現(xiàn)的關(guān)鍵問題包括Theoleditor與BHO的通訊;Theoleditor中的word操作;Theoleditor與服務(wù)器的通訊及系統(tǒng)安全性。
3.1 客戶端編輯器與BHO的通訊
客戶端編輯器需要在IE訪問特定網(wǎng)址的時(shí)候啟動(dòng),而BHO和Theoleditor需要進(jìn)行必要的通訊,如BHO需要知道Theoleditor的正確位置,Theoleditor需要知道IE瀏覽器訪問的服務(wù)器地址、端口等信息,需要知道調(diào)用的是錄入試題、批量導(dǎo)入還是輸出試卷等。這里BHO獲得Theoleditor.exe的路徑,可考慮安裝客戶端編輯器時(shí)將這部分的信息寫入windows注冊表中即可。同樣,Theoleditor所需的各種基本信息也可由BHO對(duì)IE地址信息解析,并寫入注冊表,再由Theoleditor運(yùn)行后讀取。
用于實(shí)現(xiàn)讀取配置信息的類為CConfigInfo.java。該類將BHO寫入注冊表的信息讀取出來供其他部分的代碼使用。配置信息存放在注冊表的HKEY_LOCAL_MACHINE\\\\Software\\\\ThetiEditor下。該類中的CConfigInfo::CConfigInfo() 構(gòu)造函數(shù),負(fù)責(zé)讀取注冊表的HKEY_LOCAL_MACHINE\\\\Software\\\\ThetiEditor下的所有值的名稱和值的數(shù)據(jù),并分別存入對(duì)應(yīng)的字符串?dāng)?shù)組names 和values中。代碼實(shí)現(xiàn)如下:
CConfigInfo::CConfigInfo()
{
m_LoadOK=FALSE;
HKEY hKEY;//注冊表的鍵
LPCTSTR data_Set=\"Software\\\\ThetiEditor\";
DWORD type=REG_SZ,size=1024;
//打開注冊表
long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_READ,hKEY));
if(ret0!=ERROR_SUCCESS)
{
AfxMessageBox(\"錯(cuò)誤:無法打開有關(guān)的hKEY\");
return;
}
unsigned long valuenamemaxlen,valuemaxlen,valuecount;//鍵值長度/數(shù)量
::RegQueryInfoKey(hKEY,NULL,NULL,NULL,NULL,NULL,NULL,valuecount,valuenamemaxlen,valuemaxlen,NULL,NULL);//查詢注冊表下鍵值的數(shù)量/長度
unsigned int i;
for(i=0;i char name[1024]; char value[1024]; type=REG_SZ; size=1024; if(::RegEnumValue(hKEY,i,name,size,0,type,NULL,NULL)!=ERROR_NO_MORE_ITEMS){ type=REG_SZ; size=1024; ::RegQueryValueEx(hKEY,name,0,type,(BYTE*)value,size); } CString strname,strvalue; strname.Format(\"%s\",name);//格式化鍵名 strvalue.Format(\"%s\",value);//格式化鍵值 names.Add(strname); values.Add(strvalue); } ::RegCloseKey(hKEY); m_LoadOK=TRUE; } 3.2 客戶端編輯器中的word操作 Theoleditor需要實(shí)現(xiàn)word文檔的打開、另存、文檔的拷貝、粘貼、向表格中插入數(shù)據(jù)、設(shè)定頁邊距、行距等功能。由于微軟的Office提供了Automation接口,Theoleditor可通過該接口調(diào)用word,實(shí)現(xiàn)各種所需的功能。具體的實(shí)現(xiàn)可首先通過word錄制宏,然后分析宏的結(jié)構(gòu),調(diào)用對(duì)應(yīng)VC中的Word包裝類的功能。 用于實(shí)現(xiàn)word操作的類為WordOperator.java。以編輯試題為例,用到的主要方法有打開當(dāng)前word文檔、將word文檔另存為html文件、保存當(dāng)前word文檔、退出word等。 3.3 客戶端編輯器與服務(wù)器的通訊及系統(tǒng)安全性 Theoleditor和服務(wù)器之間需要通過通訊知道所編輯的是哪一個(gè)文檔,需要上傳文檔到服務(wù)器或從服務(wù)器下載文檔。另一方面,服務(wù)器上文檔的id不能通過明碼傳輸至客戶端,否則用戶將有可能通過分析該信息獲取服務(wù)器上的其他文件。這里采用服務(wù)器提供票據(jù)給BHO,BHO將票據(jù)傳遞給Theoleditor,然后Theoleditor通過該票據(jù)與服務(wù)器通訊,以上傳和下載對(duì)應(yīng)的文檔,并保證系統(tǒng)的安全。票據(jù)信息主要包括兩部分,前面一部分是通過系統(tǒng)時(shí)間產(chǎn)生的隨機(jī)字符串,后一部分則是系統(tǒng)時(shí)間的毫秒數(shù)。 Theoleditor與服務(wù)器的通訊主要用到文件傳輸類CfileTransfer.java,包括上傳和下載文件。上傳文件的方法為CFileTransfer::uploadFile(CString serverip,CString uri,int port,CString filepath,CString type),包括服務(wù)器地址、通用資源標(biāo)志符、本地文件保存的路徑以及文件的類型;下載文件的方法為CFileTransfer::downloadFile(CString url, CString filepath,CString fullfilename),包括下載指定url的文件,并將文件存儲(chǔ)在filepath下,文件名通過fullfilename傳遞回去。 4 結(jié)束語 IE是目前網(wǎng)絡(luò)中最廣泛的一種應(yīng)用,Microsoft Word則在當(dāng)前是占有巨大優(yōu)勢的文字處理器,而基于Word的客戶端編輯器可以較好地將二者銜接,在普通IE下實(shí)現(xiàn)Word的自動(dòng)調(diào)用,充分發(fā)揮其強(qiáng)大的文字處理功能。 參考文獻(xiàn) [1]管恩京,陳靜.試題試卷庫系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).第十屆全球華人計(jì)算機(jī)教育應(yīng)用會(huì)議論文集. 北京:清華大學(xué)出版社,2006 [2]管恩京.大學(xué)學(xué)科試題庫及其管理系統(tǒng)的研究與設(shè)計(jì)[碩士學(xué)位論文].北京:清華大學(xué),2007. [3]位元文化.精通視窗程序設(shè)計(jì).西安:世界圖書出版西安公司,2000.5 [4]步行者工作室.Visual C++ 6.0高手速成.北京:兵器工業(yè)總公司,1999.6 [5]吳師通.Visual Basic 實(shí)用程序百例.北京:清華大學(xué)出版社,2000.5