在word的處理之中,文字,各種類型的圖片,最復雜的公式,之前編寫的API基本都覆蓋了。不過,昨天在做一個文檔測試時,發現表格沒有能很好的處理。debug文檔對應的xml發現,表格與其它這幾種內容的組織方式不太一樣。像圖片,公式,不管么樣,都還在基于p(word的基本段落標簽)標簽,圖片與公式的內容都還是隸屬于p的內容塊里面。但是表格的組織方式是順序的,獨立于任何元素。我們可以通過一張圖來看看:
并且它的上級節點就是document,tbl就是word中對應的表格,里面有對表格寬度,高度,行列的各種屬性定義。
拆分:
具體在做內容拆分的時候,如果把某一塊內容的拆在一起,這是很關鍵的。特別是里面包含了文字,圖片,表格。問題來了,如何定位表格呢?請看下面的圖:
很明顯,表格里面如果要顯示內容,必然是有p元素塊。在通過過濾p元素塊的過程中,我們可以定位到表格中的某一個cell 塊,通過docx4j提供的得到父表簽的方法,就能找出當前這個cell所在表格在哪一行,那一行屬于哪個表格。過程就是tc=>tr=>tbl的關系(如果對docx4j的API熟悉,你就毫無壓力)。有些同學可能會問,如果通過1定位到了表格,那2,3,4,5,6肯定都能定位了?這樣不就同一個表格重復了嗎?good question!解決這個問題也很easy,我們可以對添加過的tbl做一個緩存,如果下次再出現,證明已經處理過了。效果如圖:

原word截圖

拆分之后
以上就是關于拆分的原理說明。下面,我們簡單說一下組合。
組合:
單純就表格來說,組合其實不復雜,通過body得到當前子WORD的所有元素,遍歷之后添加到新的WORD就行了。
最后貼一張合成的WORD截圖:

1

2

3

4
整個WORD是一個A3的版式,是帶奇偶分頁的。
我的微信公眾號,歡迎溝通學習。
posted on 2017-08-25 15:54
alexcai 閱讀(757)
評論(0) 編輯 收藏