2010-07-07 91 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更不需要空间文本保存

您应该还是可以直接设置格式上运行。