docx4j是一款在java世界處理微軟word/ppt/excel文檔的強(qiáng)大工具。它其實(shí)是一個(gè)半開(kāi)源的產(chǎn)品。雖然它對(duì)WORD各種處理在API層 面進(jìn)行了封裝,但是像WORD本身的拆分,合并。其作者(Jason Harrop)是單獨(dú)提出來(lái)了,封裝成了商用的JAR包來(lái)提供支持。而我在深入學(xué)習(xí)其API之后,先后將組合,拆分技術(shù)進(jìn)行了實(shí)現(xiàn)。
docx4j用到了個(gè)比較N的技術(shù)--JAXB.它建立了XML文件與JAVA對(duì)象互相轉(zhuǎn)換的一個(gè)橋梁。
JAXB(Java Architecture for XML Binding) 是一個(gè)業(yè)界的標(biāo)準(zhǔn),是一項(xiàng)可以根據(jù)XMLSchema產(chǎn)生Java類的技術(shù)。該過(guò)程中,JAXB也提供了將XML實(shí)例文檔反向生成Java對(duì)象樹(shù)的方法, 并能將Java對(duì)象樹(shù)的內(nèi)容重新寫(xiě)到XML實(shí)例文檔。從另一方面來(lái)講,JAXB提供了快速而簡(jiǎn)便的方法將XML模式綁定到Java表示,從而使得Java 開(kāi)發(fā)者在Java應(yīng)用程序中能方便地結(jié)合XML數(shù)據(jù)和處理函數(shù)。
WORD以XML存儲(chǔ)的原理:
WordprocessingML體系結(jié)構(gòu)圖
WordML以XML的格式定義了文檔中各個(gè)部分的屬性,如頁(yè)眉,頁(yè)腳,圖片,樣式。每一種資源都其實(shí)是使用一個(gè)XML的結(jié)點(diǎn)來(lái)描述。舉例來(lái)說(shuō)明:
假如有這樣一個(gè)文檔
docx4j可以將WORD直接轉(zhuǎn)換其對(duì)應(yīng)的XML文檔,我們可以以第一段【開(kāi)始】到【題文】那一段的XML片斷來(lái)說(shuō)明。初步看,這段內(nèi)容包含了若干文字,一張圖片。
文字段:
圖片:
圖片的關(guān)聯(lián)資源引用定義:
圖片資源的數(shù)據(jù)定義:
看到NB的地方?jīng)]有,使用binarydata存儲(chǔ)這個(gè)圖片的數(shù)據(jù)。
組合原理:
拆分原理:
原理基本如上,已經(jīng)在項(xiàng)目中實(shí)際應(yīng)用。有了這層API,你可以通過(guò)程序去生成一份試卷(類似學(xué)科網(wǎng)的組卷功能),或者把試卷拆分成單個(gè)的試題入庫(kù)。如有不明白的,歡迎溝通學(xué)習(xí)。
之前生成的試卷sample:主要在基礎(chǔ)API之上,封裝了生成一份試卷常用的方法。其實(shí)就是內(nèi)容的樣式設(shè)置及WORD組合。
我的微信公眾號(hào),歡迎溝通學(xué)習(xí)。
posted on 2016-03-14 16:10
alexcai 閱讀(5573)
評(píng)論(2) 編輯 收藏