2015-03-23 4 views
1

Так пример кода:Как ограничить в xsl-fo печать максимум тремя строками для столбца?

<xsl:attribute-set name="topTableInfo"> 
    <xsl:attribute name="font-size">10pt</xsl:attribute> 
    <xsl:attribute name="font-family">Helvetica</xsl:attribute> 
    <xsl:attribute name="font-weight">bold</xsl:attribute> 
</xsl:attribute-set> 

<fo:table> 
    <fo:table-column column-width="25mm"/> 
    <fo:table-column column-width="50mm"/> 
    <fo:table-body> 
     <fo:table-row> 
      <fo:table-cell xsl:use-attribute-sets="topTableInfo"> 
       <fo:block margin-bottom="0.2cm" > 
        <xsl:value-of select="x/y"/> - <xsl:value-of select="x/z"/> 
       </fo:block> 
      </fo:table> 

Мой вопрос здесь:

<xsl:value-of select="x/y"/> - <xsl:value-of select="x/z"/> 

Я хочу, чтобы этот текст, чтобы занять максимум 3 строк текста в этом блоке. Текст может быть 1 строка или 2 строки, но не должен превышать 3 строки. Как я могу это сделать?

x/y генерируется динамически с помощью некоторого ввода от пользователя.

enter image description here

+0

Можете ли вы привести пример 'x/y' или' x/z'? Я не могу понять, как он может генерировать более одной строки в таблице. – potame

+0

@potame Они всего лишь некоторые строки .. Как «foo bar fooofofofo bar bar bar» Почему вы говорите, что не может генерировать более 1 строки текста в блоке? –

+0

@potame Я добавил пример. –

ответ

1

на основе нового комментарий ниже, единственный способ, которым я могу думать о том, что работает со всеми форматтерами бы оценить количество символов, которые бы тебя в третьей строке. Вы можете приблизиться, например, я бы выбрал среднее количество контента и подсчитал количество символов, чтобы разместить вас в середине третьей строки.

Затем реализовать в вашем XSL Условный добавить эти атрибуты, как это:

<xsl:if test="string-length($lengthofstring) > ##"> 
    <xsl:attribute name="height">40pt</xsl:attribute> 
    <xsl:attribute name="overflow">hidden</xsl:attribute> 
    </xsl:if> 

Так что все, что есть три линии, или больше, будет иметь высоту и переполнение, все, что меньше, чем не будет иметь какой-либо и будет только высотой контента.

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

+0

Спасибо, но теперь, если текст всего 1 строка, блок все равно будет 3 строки, которые мне не нравятся. –

+0

Изменено обходным путем, которое будет работать с этим комментарием. –

+0

Спасибо, но я уже пытаюсь использовать это в шаблоне скорости, который я использую для создания строки. Но, к сожалению, иногда текст будет слишком коротким, а иногда он переполняется до 4-й строки. Спасибо, в любом случае. –