2010-07-07 86 views
1

我試圖使用poi-ooxml生成一個docx文檔。以下代碼幾乎可以生成我想要的文檔,但出於某種原因,它會從文本中刪除結尾和開始空格。DOCX世代:POI OOXML修飾字符串中的空格

XWPFDocument document = new XWPFDocument(); 

XWPFParagraph paragraph1 = document.createParagraph(); 
XWPFRun para1run1 = paragraph1.createRun(); 
para1run1.setText("Dette er ein tekst med space på slutten. Den har ein "); 

XWPFRun para1run2 = paragraph1.createRun(); 
para1run2.setText("utheva tekst"); 
para1run2.setBold(true); 

XWPFRun para1run3 = paragraph1.createRun(); 
para1run3.setText(" før ein tekst med space i byrjinga. Denne paragrafen skal også ha litt tekst slik at den blir ganske lang og går over fleire linjer."); 

XWPFParagraph paragraph2 = document.createParagraph(); 
XWPFRun para2run1 = paragraph2.createRun(); 
para2run1.setText("Dette er ein tekst med space på slutten. Den har ein "); 

XWPFRun para2run2 = paragraph2.createRun(); 
para2run2.setText("kursiv tekst"); 
para2run2.setItalic(true); 

XWPFRun para2run3 = paragraph2.createRun(); 
para2run3.setText(" før ein tekst med space i byrjinga. Denne paragrafen skal også ha litt tekst slik at den blir ganske lang og går over fleire linjer."); 

document.write(new FileOutputStream("c:/tmp/doc/docxtest.docx")); 

的代碼生成的文件,但在此之前,因爲文本「utheva tekst」和「kursiv tekst」後的空格被刪除,而最終的結果是這樣的:


德特ER永遠不會有空間。 Den harin einuthevatekstførein tekst med space i byrjinga。 Denne paragrafen skalogsåha litt tekst slik at den blir ganske lang oggårover fleire linjer。

Dette er ein tekst med spacepåslutten。 Den har einkursivtekstførein tekst med space i byrjinga。 Denne paragrafen skalogsåha litt tekst slik at den blir ganske lang oggårover fleire linjer。


其中「utheva tekst」是粗體而「kursiv tekst」是斜體。

對此的任何幫助將是非常有用的。

回答

2

無論您使用的POI或docx4j,我想你需要@xml:空間即

<w:t xml:space="preserve"> 

在docx4j,沒有設置此方法setSpace(字符串值)。

2

我知道這是一個非常古老的問題,但我剛剛有類似的問題,並設法使用JasonPlutext給出的提示。

而是直接設置在運行的文本,你需要使用這樣的:

XWPFRun firstBit = para.createRun(); 
CTText firstBitText = linkPrefix.getCTR().addNewT(); 
linkPrefixText.setStringValue("This is the first half of text with trailing space "); 
linkPrefixText.setSpace(SpaceAttribute.Space.PRESERVE); 

para.createRun().setText("and here is more text that doesn't need space preserved"); 

,這將給你

這是文字的上半年尾隨的空間,這裏是更不需要空間文本保存

而不是

這是文字的上半年尾隨這裏是spaceand更不需要空間文本保存

您應該還是可以直接設置格式上運行。