docx4j是一款在java世界處理微軟word/ppt/excel文檔的強大工具。它其實是一個半開源的產品。雖然它對WORD各種處理在API層 面進行了封裝,但是像WORD本身的拆分,合并。其作者(Jason Harrop)是單獨提出來了,封裝成了商用的JAR包來提供支持。而我在深入學習其API之后,先后將組合,拆分技術進行了實現。
docx4j用到了個比較N的技術--JAXB.它建立了XML文件與JAVA對象互相轉換的一個橋梁。
JAXB(Java Architecture for XML Binding) 是一個業界的標準,是一項可以根據XMLSchema產生Java類的技術。該過程中,JAXB也提供了將XML實例文檔反向生成Java對象樹的方法, 并能將Java對象樹的內容重新寫到XML實例文檔。從另一方面來講,JAXB提供了快速而簡便的方法將XML模式綁定到Java表示,從而使得Java 開發者在Java應用程序中能方便地結合XML數據和處理函數。
WORD以XML存儲的原理:

WordML以XML的格式定義了文檔中各個部分的屬性,如頁眉,頁腳,圖片,樣式。每一種資源都其實是使用一個XML的結點來描述。舉例來說明:
假如有這樣一個文檔


docx4j可以將WORD直接轉換其對應的XML文檔,我們可以以第一段【開始】到【題文】那一段的XML片斷來說明。初步看,這段內容包含了若干文字,一張圖片。
文字段:

圖片:

圖片的關聯資源引用定義:

圖片資源的數據定義:

看到NB的地方沒有,使用binarydata存儲這個圖片的數據。
組合原理:

拆分原理:

原理基本如上,已經在項目中實際應用。有了這層API,你可以通過程序去生成一份試卷(類似學科網的組卷功能),或者把試卷拆分成單個的試題入庫。如有不明白的,歡迎溝通學習。
之前生成的試卷sample:主要在基礎API之上,封裝了生成一份試卷常用的方法。其實就是內容的樣式設置及WORD組合。


我的微信公眾號,歡迎溝通學習。
