Вставка разрыва строки в PDF-файл, созданный из XSL FO с использованием <xsl: value-of> - PullRequest
21 голосов
/ 07 сентября 2010

Я использую XSL FO для создания файла PDF, содержащего таблицу с информацией. Один из этих столбцов является столбцом «Описание». Пример строки, которую я заполняю одним из этих полей описания, выглядит следующим образом:

This is an example Description.<br/>List item 1<br/>List item 2<br/>List item 3<br/>List item 4

Внутри ячейки таблицы, которая соответствует этому описанию, я бы хотел, чтобы вывод отображался следующим образом:

This is an example Description.
List item 1
List item 2
List item 3
List item 4

Я узнал из поиска в другом месте, что вы можете делать разрывы строк в XSL FO, используя <fo:block></fo:block> внутри другого <fo:block> элемента. Поэтому, даже прежде чем я проанализирую XML с моей таблицей стилей XSL, я заменяю все вхождения <br/> на <fo:block/>, так что буквальное значение строки теперь выглядит так:

This is an example Description.<fo:block/>List item 1<fo:block/>List item 2<fo:block/>List item 3<fo:block/>List item 4

Проблема возникает, когда строка описания, которую я использую, получается с использованием <xsl:value-of>, например, следующим образом:

<fo:block>
    <xsl:value-of select="descriptionStr"/>
</fo:block>

В этом случае значение, которое выводится в мой PDF-документ, является литеральным значением, поэтому оно выглядит точно так же, как и в предыдущем примере со всеми литералами <fo:block/>. Я попытался вручную жестко кодировать <fo:block/> в середине другой строки, и он отображается правильно. Например. если я напишу в моей таблице стилей:

<fo:block>Te<fo:block/>st</fo:block>

Будет отображаться правильно как:

Te
st

Но, похоже, этого не происходит, когда <fo:block/> находится внутри значения оператора <xsl:value-of select=""/>. Я пытался найти это на SO, а также в Google и т. Д. Безрезультатно. Любой совет или помощь будут с благодарностью. Спасибо!

Ответы [ 11 ]

0 голосов
/ 04 апреля 2012

</fo:block> сам по себе не является прямой заменой <br/> <br/> является непарным аббатством HTML, который не имеет прямого эквивалента в xsl: fo

</fo:block> означает конец блока. Если вы разбросаете их по тексту, у вас не будет действительного xml, и ваш xsl-процессор выдаст ошибки.

При желаемом форматировании разрыва строки каждый блок будет находиться на новой строке. Вам потребуется <fo:block> начальный блок и </fo:block> пара конечных блоков для каждой строки.

...