Многострочный текст внутри fo: встроенный

#xml #xslt #xsl-fo

#xml #xslt #xsl-fo

Вопрос:

Я борюсь с моим xsl: fo — для создания pdf. Я пытаюсь сгенерировать блок со встроенными текстовыми элементами, содержащими 2 строки.

 <fo:block>
  <fo:inline>
     <xsl:value-of select="concat('Title:', $title)"/>
  </fo:inline>
  <fo:leader leader-pattern="space"/>
  <fo:inline>
       <fo:block>Info:</fo:block>
       <fo:block><xsl:value-of select="$date"/> </fo:block>
  </fo:inline>
</fo:block>
  

Но это не работает. Возможно ли сделать так, как рисуется в схеме?

введите описание изображения здесь

Комментарии:

1. Тот же код, который я пробовал, и оба блока отображаются в отдельной строке.

2. Почему вы не используете <fo:table> ?

Ответ №1:

То, что вы нарисовали, выглядит как таблица.

Вы можете поместить свои два блока в fo:inline-container (https://www.w3.org/TR/xsl11/#fo_inline-container ):

 <fo:block>
    <fo:leader leader-pattern="space" leader-length.optimum="50%" />
    <fo:inline>
        title
    </fo:inline>
    <fo:leader leader-pattern="space" leader-length.optimum="50%" />
    <fo:inline-container alignment-baseline="middle">
        <fo:block>Info:</fo:block>
        <fo:block>date</fo:block>
    </fo:inline-container>
</fo:block>
  

Еще более табличная альтернатива:

 <fo:block text-align="center">
    <fo:inline-container width="80%">
        <fo:block>title</fo:block>
    </fo:inline-container><fo:inline-container alignment-baseline="middle" width="20%">
        <fo:block>Info:</fo:block>
        <fo:block>date</fo:block>
    </fo:inline-container>
</fo:block>
  

И в виде таблицы:

 <fo:table width="100%" text-align="center">
    <fo:table-body>
        <fo:table-row>
            <fo:table-cell width="80%" display-align="center">
                <fo:block>title</fo:block>
            </fo:table-cell>
            <fo:table-cell width="20%">
                <fo:block>Info:</fo:block>
                <fo:block>date</fo:block>
            </fo:table-cell>
        </fo:table-row>
    </fo:table-body>
</fo:table>
  

Комментарии:

1. К сожалению, элементы, помеченные как fo:inline-container , не отображаются в моем предварительном просмотре i.imgur.com/OOyUkXy.png Оба fo: inline-container и fo: block-container не работают

2. У меня это работает с форматером AH. Ваш «заголовок» смещен от центра, поэтому ваш форматировщик может воспринимать leader-length.optimum слишком буквально, что приведет к fo:inline-container переполнению содержащей области. Я добавил альтернативу, которая использует два fo:inline-container , оба с фиксированной шириной. Однако разметку FO было бы легче понять кому-либо другому, если бы вы просто использовали fo:table для достижения эффекта.

3. Как я могу объединить две ячейки в таблице? number-rows-spanned=" " у меня не работает.

4. Буквенный пробел не должен работать. number-rows-spanned="2" должно сработать.