最近遇到需求需要給文檔指定run上添加書簽,網上查到的方法也是需要在run創建之前和之后分別添加書簽的start和end,可查看http://www.javaear.com/question/47182971.html
試驗過程:創建新的文檔,新的段落,調用addRun將原來的run add進去,但是后面發現新文檔里面有run下載下來卻是一片空白,后面發現addRun和createRun的區別是createRun時候綁定到了指定paragraph並且還往iruns里面添加了
所以后面重寫了XWPFParagraph的addRun方法,與createRun保持一致,依舊沒有效果,也沒有找到原因,網上也沒有查到相關資料,只有換成創建新的文檔,新的段落,新的run,然后將原文檔段落樣式以及run的樣式復用過來。
段落樣式復用:主要是換行,縮進等
newParagraph.getCTP().setPPr(content.getCTP().getPPr());//設置段落樣式,換行,空格等
run樣式復用:字號,顏色,字體等
XWPFRun newRun = paragraph.createRun(); newRun.setText(run.text());//文字數據 newRun.getCTR().setRPr(run.getCTR().getRPr());//樣式
添加書簽:
CTBookmark ctBookmark = paragraph.getCTP().addNewBookmarkStart(); ctBookmark.setName(colorName + "-" + index); ctBookmark.setId(BigInteger.valueOf(index)); addNewRun(paragraph, run);//此方法是上面樣式復用方法 paragraph.getCTP().addNewBookmarkEnd().setId(BigInteger.valueOf(index));
生成效果: