DOCX生成:POI OOXML修剪字符串空格

时间:2010-07-07 11:35:27

标签: java apache-poi openxml wordprocessingml

我正在尝试使用poi-ooxml生成docx文档。下面的代码几乎生成了我想要的文档,但由于某种原因,它会从文本中删除end和start空格。

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”之前和之后的空格被删除,最终结果如下:


Dette er ein tekst medspacepåslutten。 Den hareinuthevatekstføreintekst med space i byrjinga。 Denne paragrafen skalogsåhalitt tekst slik at den blir ganske langoggårshilirelinjer。

Dette er ein tekst medspacepåslutten。 Den dereinkursivtekstføreintekst med space i byrjinga。 Denne paragrafen skalogsåhalitt tekst slik at den blir ganske langoggårshilirelinjer。


“utheva tekst”是粗体,“kursiv tekst”是斜体。

对此的任何帮助都非常有用。

2 个答案:

答案 0 :(得分:2)

无论你使用poi还是docx4j,我都希望你需要@xml:space ie

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

在docx4j中,有一个方法setSpace(String value)用于设置它。

答案 1 :(得分: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");

哪个会给你

  

这是带有尾随空格的文本的前半部分,这里有更多不需要空间保留的文本

而不是

  

这是带有尾随空格的文本的前半部分,这里有更多不需要空间保留的文本

您仍然可以直接在运行中设置格式。