При создании документа XSL я столкнулся со следующей проблемой. Я хочу сохранить перевод строки в исходном тексте, поэтому я установил linefeed-treatment="preserve"
. Однако это также означает, что он сохраняет перевод строки вне текстового содержимого и в реальных элементах xml. Пример:
String content = "<fo:block white-space-collapse=\"true\" ><fo:inline>this is some </fo:inline><fo:inline font-weight=\"bold\">custom</fo:inline><fo:inline> \ncontent</fo:inline></fo:block>";
Это текст, который я использую в качестве ввода. Он преобразован в XML-документ на Java. Обратите внимание на \ n прямо перед содержимым, указывающим на новую строку. Это приведет к следующему выводу в документе FO:
<fo:block white-space-collapse="true" linefeed-treatment="preserve">
<fo:inline>this is some</fo:inline>
<fo:inline font-weight="bold">custom</fo:inline>
<fo:inline>
content</fo:inline>
</fo:block>
Так что он показывает разрыв строки прямо перед текстовым содержимым, что нормально.
Я использую Apache FOP, чтобы преобразовать это в файл PDF, а также другую стороннюю библиотеку, чтобы преобразовать это в файл DocX. В обоих случаях содержимое будет отображаться так:
это какой-то
заказ
содержание
Когда я вручную изменяю свой XSL и делаю так:
<fo:block white-space-collapse="true" linefeed-treatment="preserve"><fo:inline>this is some </fo:inline><fo:inline font-weight="bold">custom</fo:inline><fo:inline>
content</fo:inline></fo:block>
Тогда мой вывод в порядке и, как я и ожидал:
это какой-то кастом
содержание
Очевидно, что я не хочу, чтобы эти дополнительные разрывы строк исходили от самих элементов, но я действительно хочу сохранить перевод строки из текстового содержимого. Есть ли способ сделать это? Или есть альтернативное решение для сортировки разрывов строк?