邵欣欣 張明會 高梓峻
摘 要:本文的在線生成在當前的信息系統中有廣泛的應用,基于現有的POI和Itext等API無法實現的問題進行擴展。文中研究了文檔的直接生成中的難點問題,包括復雜表格的生成、單元格的合并等;還研究了對Word和Excel的內容進行替換的文檔生成方式,總結了適用于Word和Excel文檔的最優生成方式。以上方法均已在項目中進行應用,并取得了良好的效果。
關鍵詞:文檔生成;寫入生成;自定義模板;信息系統
中圖分類號:TP311 文獻標識碼:A
Abstract:Text online generated have a wide range of applications in current information systems.Aiming at the problem of document generation in POI and Itext technology,the difficulties of generating documents are studied,including the generation of the complicated form,the cell's merger etc.Replacing content of Word and Excel is studied.The optimal generation of Word and Excel document is proposed.These methods have been applied in the project,and achieved good results.
Keywords:document generation;written generation;custom template;information system
1 引言(Introduction)
在高校和企業中,報表和文檔的處理一直是必不可少的組成部分。當前文檔多以電子形式編寫和存儲,但是很多時候又要紙質版的存檔,因此文檔的在線生成是一項必不可少的功能。例如電子商務網站的賬單、交易額、發票、在線合同等,高校的各類辦公和教學文檔,例如對于教師有培養方案、大綱、教學日歷、教學總結等,對于學生有實驗報告、畢設指導手冊、開題報告、譯文、畢業論文、畢業成績單、學位證明等重要的文檔。這些電子文檔往往需要復雜的形式,既包含文本和表格,又包含圖片,甚至在表格里加入圖片。基于這樣的需求,迫切需要一套能夠簡單、實用、高效地滿足各類報表生成的API。本文就以高校的各類文檔的生成為需求,展開研究文檔生成技術。
當前,常用的Java系列的文檔生成的擴展包主要有Itext、POI和JXLS,這幾種擴展包可以實現Excel、Word和PDF文件的導出,但是它們都存在某些弊端。Word POI生成簡單的Excel的確很優秀,但是操作Word的功能卻不盡人意。Itext對于PDF的輸出的介紹資料較多,對于Word文檔的輸出的介紹也不多,對于復雜表格的輸出也存在不靈活等問題,而且也無法實現對Word文檔分欄和增加水印等功能[1]。和POI結合應用的JXLS在使用模板生成Excel文檔方面有一定的優勢,而這方面的文獻并不多。
綜上所述,迫切需要一組API能夠實現復雜文檔的輸出,這也正是本文要解決的問題。本文提出了一套解決方案,具有實用性強、靈活性好等特點。
2 系統框架(System architecture)
高校的文檔包含內容較多,如何組織數據和確定數據最合適的輸出方式,都是在需求階段就需要解決的問題,基于文檔較多,數據量大的問題,首先對文檔進行歸類,確定生成方式。本文要研究的文檔主要有Word和Excel兩種輸出形式,根據內容可采用直接生成和模板替換兩種方式。
高校文檔生成系統共分為四層,包括數據采集層、數據存儲層、數據分析和輸出層。不同層級間采用文件服務的方式傳遞數據。系統應用當前比較成熟的SSH框架,前臺使用JQuery和AngularJS,數據庫采用Oracle數據庫[2],詳細的系統架構如圖1所示。
3 功能實現(Function realization)
3.1 寫入生成
基于對Word POI和Itext現有功能的研究,確定對Itext進行改進后生成Word文檔更適合。對現有API進行封裝,生成兩種方案各自的擴展包,保證具備生成復雜Word和PDF文檔的方式和方法。當前的API已經能夠實現簡單的Word文檔的輸出,但是對于復雜表格的生成還無法實現。另外,對于生成頁眉、頁腳和水印等內容也不夠靈活。因此,對現有API進行封裝,能夠實現復雜表格的生成。培養方案、教學大綱和教學總結都采用此方式實現。
項目采用對現有Itext的API進行封裝,封裝為”ComplexTextUtils”,此類中提供生成word文檔的基本方法,包括生成正文、簡單表格、復雜表格、水印和頁眉頁腳等。
這部分的難點就是生成復雜的表格和生成頁眉、頁腳等內容。
3.1.1 復雜表格的生成
Itext自帶的API根據表格內容、行跨度和列跨度三個參數進行組織數據,那么只要計算出行和列的跨度,就可以動態組織數據,生成復雜的表格[3]。
經過改進的API中有多個重載的InsertComplexTable方法,用來實現復雜表格的顯示,需要為此方法提供至少三個參數,分別為標題數組、正文數組和列數,如果還有更高的要求,可以提供更多的參數。
public void insertComplexTable(List
那么,如何通過算法對數據的行跨度和列跨度進行計算,是需要解決的重點問題。表格數據多存放于集合中,需要對集合類的結構進行遍歷,確定行跨度和列跨度,遍歷采用如下方法進行,考慮到章節和知識點之間的嵌套,采用循環遍歷的方式對數據進行清洗,確定每個單元和節的行跨度。在當前系統中集合的結構共有三層,相當于樹的結構是三層,對內容進行遍歷,根據下一層節點的個數,先把上一層結構補充完成[4]。
3.1.2 頁眉、頁腳的生成
Itext還能夠實現水印、頁碼、復雜表格、圖片、頁眉等內容的生成,頁眉和頁腳生成效果如圖4所示。
3.2 替換生成
在高校管理系統中,有部分教學文檔格式復雜,但是內容固定,僅需要替換和填充就可以。此類文檔適合采用替換的方式生成。教學日歷和畢業證明等文檔的格式、樣式和版式都是相同的,只是部分字段進行替換即可[5],那么對于這樣的文檔適合使用文本替換的技術實現,替換涉及的文檔主要也是Word和Excel。
3.2.1 Word的替換應用POI的替換功能
首先來看Word文檔的替換,主要應用于生成畢業證明和學位證明。利用標簽技術來確定待替換的變量的位置[4],對于每個要替換的數據都設置為單獨的標簽,在編寫標簽需要注意的一點就是標簽不能有其他格式,必須清除無效字符,可以在文本編輯器中編寫,粘貼到Word文檔中采用POI自帶的功能,把要被替換的數據組織在HashMap
3.2.2 Excel的替換
其次是Excel的替換。Excel文檔的替換主要是在教學日歷中使用,經對比發現利用JXLS來實現內容的替換最適合。此方法采用編寫腳本的方式,腳本中可以寫入代碼,相同格式的數據可以循環插入,把數據以類的方式組織,放在List中,例如Course類。如果Course類中包含其他的類,可以作為屬性[7]。
4 結論(Conclusion)
通過對Itext、POI和JXLS等文本輸出技術的研究和對比,對原有API進行改進,采用最優的方法實現了文本的在線輸出,能夠滿足以多種復雜的方式輸出Word和Excel文本。本文的方式和方法已在項目中進行應用。另外在文獻[6]—文獻[8]的App系統中,也進行了應用,并取得了非常良好的效果。
參考文獻 (References)
[1] Bing L,Li P,Liao Y,et al.Abstractive Multi-Document Summarization via Phrase Selection and Merging[J].Computational Linguistics,2015,31(4):505-530.
[2] Abualigah L M,Khader A T,Al-Betar M A,et al.Text feature selection with a robust weight scheme and dynamic dimension reduction to text document clustering[J].Expert Systems with Applications,2017,84(C):24-36.
[3] Ayyar K,Han C J.System and method for computing, applying, and displaying document deltas[J].Remote Sensing of Environment,2017,118(118):339-355.
[4] 周千明,朱欣娟.基于Aspose技術的自定義模板文檔生成方法[J]. 計 算 機 系 統 應 用,2015,24(6):235-238.
[5] 張艷偉.QT框架下的WORD文檔生成方法[J].計算機應用與軟件,2015,32(10):120-122;150.
[6] 付麗梅,鄧繼禹,賈躍.基于騰訊微校平臺的易學習APP設計與實現[J].考試周刊,2017(07):112.
[7] 付麗梅,劉英鵬,賈躍.基于騰訊微校平臺的校園移動辦公APP設計與實現[J].信息系統工程,2017(01):156-157.
[8] 邵欣欣,徐健晟,冀航宇.基于VR的幻房App的設計與運營分析[J].電子元器件與信息技術,2017,7(01):1-5.
作者簡介:
邵欣欣(1980-),女,碩士,副教授.研究領域:軟件工程,虛擬現實.
張明會(1980-),女,碩士,教授.研究領域:軟件工程,算法.
高梓峻(1995-),男,本科,工程師.研究領域:軟件工程,軟件開發.