1 設計過程
1.1 實現思路
結合以上分析,在線生成Word文檔應用的大致思路如下:
(1)編制文檔模板,定義模板中標簽內容與后臺數據項的對應關系(示例中采用的是數據集的行列對應);
(2)當用戶點擊在線生成Word時,JSP頁面前端將文檔模板編號傳入后端;
(3)服務端后端程序按照文檔模板編號獲取對應的數據源ID列表,再按照各個數據源通過JDBC方式獲取數據集;
(4)服務端后端程序按照文檔模板編號通過Word程序COM組件的讀取文檔模板并遍歷其中需要替換的內容標簽,并使用標簽對應的后臺數據替換標簽文本;
(5)服務端后臺程序將處理完畢的文檔模板另存為Word文檔。
(6)JSP頁面將保存的Word文檔路徑通過HTML鏈接推送給前端頁面;
(7)用戶通過點擊HTML鏈接來下載或使用瀏覽器打開Word文檔。
1.2 主要類設計
1.2.1 文檔生成器—DocBuilder
顧名思義,文檔生成器主要用于在后臺生成Word文檔。其實現2.1節中第(3)到(5)的功能。其關鍵成員有三個:
(1)文檔模板ID,用于接收JSP頁面傳過來的文檔模板標識;
(2)Word文檔工具,用于獲取文檔模板中的所有需要替換的文本標簽、使用后臺數據替換文本標簽和將替換后的文檔另存為新的Word文檔。
(3)數據集容器,其是一個以數據集名為鍵的散列表容器,其元素值是一個二維數組,用于存放結果集的單元值。
1.2.2 Word工具類—MsWordUtil
Word工具類是在JACOB的基礎上對Word COM對象的操作所進行的再次封裝,其以單例的形式提供了對Word文檔的操控,其主要包括:
(1)建立/斷開與Word程序COM組件的連接;
(2)文檔操作,包括:新建、保存、另存和關閉;
(3)獲取文檔中所有指定左右標簽的文本塊;
(4)使用新文本替換文檔中所有舊文本。
1.2.3 標簽解析器—TagParser
標簽解析器用于解析文檔模板中文本標簽內的文本,如圖4所示的文檔模板中,表格單元格中處于左右標簽“[%”和“%]”內的文本:“=RS(數據集ID,行號,列號)”。
每解析一個文本標簽即可檢索其對應的后臺數據,并進行文本替換,例如將標簽“[%=RS(1,0,1)%]”替換成結果集1中第1行第2列的列值“張三”。
1.2.4 Web端生成在線文檔的樁模塊—stub.jsp
該JSP頁面用于接收前端頁面傳遞的文檔模板參數,并調用后臺的文檔生成器來生成目標Word文檔,并以HTML鏈接的方式將目標文檔的URL推送到前端頁面。
1.3 數據庫設計
案例中使用的是Oracle數據庫,其中示例數據表是員工表(TAB_STAFF),其結構定義如表2所示。
表2 員工表規格定義 |
字段名 |
類型 |
約束 |
默認值 |
備注 |
STA_ID |
VARCHAR2(32) |
PK |
|
工號 |
STA_XM |
VARCHAR2(20) |
|
|
姓名 |
STA_XB |
VARCHAR2(16) |
|
FK |
性別 |
STA_SR |
DATE |
|
|
出生日期 |
STA_RZRQ |
DATE |
|
|
入職日期 |
STA_ZGXL |
VARCHAR2(16) |
|
FK |
最高學歷 |
STA_BYXX |
VARCHAR2(50) |
|
|
畢業學校 |
STA_ZP |
BLOB |
|
|
照片 |
STA_BM |
VARCHAR2(16) |
|
FK |
部門 |
STA_GW |
VARCHAR2(16) |
|
FK |
崗位 |
|
|
|
|
|
|