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

发布于 2024-09-08 15:29:55 字数 1725 浏览 0 评论 0原文

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

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 med space på slutten。 Den har einutheva tekstfø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。

这是一个放荡的空间。这是在医学空间中的技术。 Denne paragrafen skal også ha litt tekst slik at den blir ganske lang og går over fleire linjer。


其中“utheva tekst”为粗体,“kursiv tekst”为斜体。

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

I'm trying to generate a docx-document using poi-ooxml. The following code produces almost the document I want, but for some reason it removes end and start spaces from the text.

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"));

The code generates the document, but the spaces before and after the texts "utheva tekst" and "kursiv tekst" are removed, and the end result looks like this:


Dette er ein tekst med space på slutten. Den har einutheva tekstfø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.

Dette er ein tekst med space på slutten. Den har einkursiv tekstfø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.


Where "utheva tekst" is bold and "kursiv tekst" is italic.

Any help on this will be very useful.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月亮邮递员 2024-09-15 15:29:55

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

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

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

Whether you use poi or docx4j, I expect you need @xml:space ie

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

In docx4j, there is a method setSpace(String value) for setting this.

儭儭莪哋寶赑 2024-09-15 15:29:55

我知道这是一个非常老的问题,但我刚刚遇到了类似的问题,并设法使用 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");

这将为您提供

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

而不是

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

您仍然应该能够直接在运行时设置格式。

I know this is a really old question, but I've just had a similar issue and managed to figure it out using the hint given by JasonPlutext.

Instead of setting the text on the run directly, you need to use this:

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");

Which will give you

This is the first half of text with trailing space and here is more text that doesn't need space preserved

rather than

This is the first half of text with trailing spaceand here is more text that doesn't need space preserved

You should still be able to set the formatting on the run directly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文