2013-10-08 53 views
1

我正在嘗試編寫一個讀取docx文件並檢查某些文本是否有顏色的程序。例如,想象一下如果所有在這句話中加粗的字實際上是以任意顏色寫成的。我希望我的程序能夠認識到,「這句話中的粗體字實際上是用某種任意顏色書寫的」這些詞都是有顏色的。從文檔中識別文本中的顏色

然後,在識別着色後,我希望能夠根據顏色編輯識別的文​​本。例如,如果上面加粗的文本是紅色的,我想在文本週圍添加「Red>」標籤,同時仍然保留未着色的句子的其餘部分。

我最初使用ZipInputStream和ZipEntry來獲取「word/document.xml」,並且我計劃從那裏拉動文本和顏色,但是我覺得這會在一段時間後變得太混亂。我也嘗試過使用Apache poi,但我不認爲它能夠識別顏色。 Docx4j看起來很有前途,不過。任何想法,建議或示例代碼讓我開始?

回答

2

字體顏色是一個運行屬性:

<w:r> 
    <w:rPr> 
     <w:color w:val="FF0000"/> 
    </w:rPr> 
    <w:t>red</w:t> 
    </w:r> 

docx4j提供了三種方式做的東西與:通過XPath的

  • 通過TraversalUtil
  • 通過XSLT

    我推薦Traversal Util,因爲XPath依賴於JAXB對它的支持,但這並不總是健壯的(至少在Sun/Oracle參考實現中)。

    查看finders package的例子使用這個。

    但除此之外,您面臨的挑戰是顏色屬性可以通過樣式指定(或者甚至作爲文檔默認值)。如果您想考慮這一點,您需要查看有效的運行屬性(這是docx4j的PDF輸出所做的)。