2013-09-05 112 views
2

我遇到了用docx4j創建段落的問題。那麼,其實不是這個段落本身,而是它的內容。我正在編寫段落中的新文檔(實際上是由段落組成的「塊」),一切工作正常。我將它們附加到一個列表中,當所有需要的段落在那裏時,我組裝文檔。現在,在這些塊之間,我需要添加新的段落,添加自定義文本。我使用這個函數來創建段落:用Docx4j創建新段落

private P createParagraph(String content) { 

P result = factory.createP(); 
R run = factory.createR(); 
Text text = factory.createText(); 

text.setValue(content); 
run.getContent().add(text); 
result.getContent().add(run); 

System.out.println("HEADER : " + result.toString()); 

return result; 
} 

打印僅打印「標題:」中,result.toString()是一個空字符串。這是爲什麼?

獎勵問題:我不想爲此打開一個新線程。是否有可能,爲段落添加一個id,它將出現在生成的html中? (如P ID = 「XYZ」 ...>

非常感謝您

+0

對於您的ID問題,請參閱我的答案在http://stackoverflow.com/questions/18255776/open-xml-add-custom-not -visible-data-to-paragraph-table/18262734#18262734如果您對段落ID有後續問題,請將其作爲單獨問題發佈。 – JasonPlutext

回答

2

如果你想看到的XML您p對象將變成,使用:

System.out.println(
      XmlUtils.marshaltoString(result, true, true)); 

org.docx4j.wml.P是通過JAXB的xjc生成的類。

有一對夫婦在https://java.net/projects/jaxb2-commons/pages/Home上市的插件,我們本來可以用於生成toString方法的,但我們沒有。

如果您想要該段的文本內容,您可以使用TextUtils

+0

謝謝。我現在創建了一個空白文檔,只有段落中我想要的文字。使用你提到的方法我檢查了結構。我添加了所有缺少的標籤,現在看起來與我在docx4j webapp中查看的文檔完全一樣。唯一的區別是我的起始元素中有很多名稱空間定義: omniflash

+0

我已經更新了我的答案。關於命名空間,這些通常會在該部分的頂部(而不是每個段落)聲明一次。 JAXB將照顧這一點。儘管如此,Sun/Oracle實施並不會刪除多餘的。 – JasonPlutext