隨筆-35  評論-33  文章-0  trackbacks-0

              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存儲的原理:

          WordprocessingML體系結構圖


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

          假如有這樣一個文檔

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

          文字段:

          圖片:

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

          圖片資源的數據定義:

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


          組合原理:


          拆分原理:

          原理基本如上,已經在項目中實際應用。有了這層API,你可以通過程序去生成一份試卷(類似學科網的組卷功能),或者把試卷拆分成單個的試題入庫。如有不明白的,歡迎溝通學習。

          之前生成的試卷sample:主要在基礎API之上,封裝了生成一份試卷常用的方法。其實就是內容的樣式設置及WORD組合。




          我的微信公眾號,歡迎溝通學習。
          posted on 2016-03-14 16:10 alexcai 閱讀(5570) 評論(2)  編輯  收藏

          評論:
          # re: 利用docx4j來處理word的合并與拆分[未登錄] 2016-03-18 06:54 | xin
          ooxml太繁瑣,docx4j在word層面做的不錯可惜更新太慢bug還是一堆。對于更精細的控制,為了保持穩定性,更推薦直接用COM調微軟API(server只能是windows而且有時很腦殘)
          或者期待下POI把word和ppt部分搞出來。
          反正對于復雜模型下的office文件生成,只有微軟自己的API最靠譜。(鄙視微軟)  回復  更多評論
            
          # re: 利用docx4j來處理word的合并與拆分 2016-03-18 09:25 | zuxiong
          @xin
          其實在這之前,我用JACOB 進行同樣功能的封裝,已經實現上上述功能。只在它是基于VBA的,在資源的處理層面,比如WORD的COPY,它是共享的。注定一臺機器同一時間只能處理一組WORD的拆分與合并處理。不能并行。所以后來才考慮使用DOCX4J。
            回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 土默特左旗| 乌什县| 东兴市| 丹寨县| 香河县| 乡城县| 普陀区| 夏津县| 青海省| 台北县| 商河县| 五莲县| 谷城县| 江津市| 海丰县| 东明县| 绵阳市| 鄄城县| 温州市| 龙口市| 长春市| 江孜县| 达孜县| 龙泉市| 武川县| 德钦县| 兴安县| 寿阳县| 黔西| 桑植县| 天气| 阿瓦提县| 盐津县| 苏州市| 靖西县| 察雅县| 固安县| 汝南县| 黄陵县| 加查县| 江孜县|