Генерация DOCX: POI OOXML удаляет пробелы из строки - PullRequest
1 голос
/ 07 июля 2010

Я пытаюсь сгенерировать 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" удаляются, и конечный результат выглядит следующим образом:


Det er ein tekst med space på slutten. Den har einutheva tekstfør ein tekst med space and byrjinga. Denne paragrafen skal også ha litt tekst slik at den blir ganske lang og går через fleire linjer.

Det er ein tekst med space på slutten. Den har einkursiv tekstfør ein tekst med space and byrjinga. Denne paragrafen skal også ha litt tekst slik at den blir ganske lang og går через fleire linjer.


Где «utheva tekst» выделено жирным шрифтом, а «kursiv tekst» - курсивом.

Любая помощь по этому вопросу будет очень полезна.

Ответы [ 2 ]

2 голосов
/ 29 сентября 2015

Я знаю, что это действительно старый вопрос, но у меня только что была похожая проблема, и мне удалось выяснить ее с помощью подсказки 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");

Что даст вам

Это первая половина текста с завершающим пробелом, а вот еще текст, который не нуждается в сохранении пробела

, а не

Это первая половина текста с завершающим пробелом, а вот еще текст, который не нуждается в сохранении пробела

Вы по-прежнему сможете устанавливать форматирование непосредственно во время прогона.

2 голосов
/ 31 августа 2010

Независимо от того, используете ли вы poi или docx4j, я думаю, вам нужен @xml: пробел, т.е.

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

В docx4j есть метод setSpace (String value) для установки этого.

...