XSL-FO: настройка ширины границы в зависимости от ширины текста

У меня проблемы с XSL-FO, использующим Apache FOP в качестве процессора. У меня есть простая таблица стилей, и я уже установил круглую рамку для контейнера fo:block. Проблема в том, что размер текста непредсказуем, учитывая, что файл .fo будет создан с использованием XSLT и XML, поэтому мне нужно сообщить FOP, чтобы он регулировал ширину границы в соответствии с шириной текста, а не применял ту же ширину к все контейнеры. Любые идеи?

В файле XSLT:

    <fo:block-container xsl:use-attribute-sets="right-side-itens">
        <fo:block-container xsl:use-attribute-sets="rounded-borders">                                    
            <fo:block>
                <xsl:value-of-select="./tagInsideXML/@attribute" />
                <!-- qwertyuiopasdfghjkl -->
            </fo:block>
        </fo:block-container>
    <fo:block-container>

`

Во внешнем файле styles.xsl:

<xsl:attribute-set name="right-side-itens">
    <xsl:attribute name="top">35px</xsl:attribute>
    <xsl:attribute name="right">45px</xsl:attribute>
    <xsl:attribute name="text-align">end</xsl:attribute>
    <xsl:attribute name="font-size">10px</xsl:attribute>
    <xsl:attribute name="height">10cm</xsl:attribute>
    <xsl:attribute name="width">200px</xsl:attribute>
    <xsl:attribute name="position">absolute</xsl:attribute>
</xsl:attribute-set>

<xsl:attribute-set name="rounded-borders">
    <xsl:attribute name="margin-top">2px</xsl:attribute>
    <xsl:attribute name="margin-right">1.8px</xsl:attribute>
    <xsl:attribute name="padding-right">2px</xsl:attribute>
    <xsl:attribute name="float">right</xsl:attribute>
    <xsl:attribute name="line-height">18px</xsl:attribute>
    <xsl:attribute name="font-size">8px</xsl:attribute>
    <xsl:attribute name="border">solid 1.2px #000000</xsl:attribute>
    <xsl:attribute name="fox:border-radius">6px</xsl:attribute>
    <xsl:attribute name="position">relative</xsl:attribute>
    <xsl:attribute name="overflow">visible</xsl:attribute>
</xsl:attribute-set>

Вот образец изображения, показывающий желаемый результат


person Evandro Teixeira    schedule 23.05.2018    source источник
comment
Можете ли вы предоставить более подробную информацию, например пример XSL-FO или снимок экрана и объяснение того, что сейчас происходит не так?   -  person Tony Graham    schedule 24.05.2018
comment
Привет, я добавил пример кода и отредактированное изображение, чтобы прояснить мои цели. Заранее спасибо.   -  person Evandro Teixeira    schedule 24.05.2018


Ответы (1)


Блок-контейнер обычно имеет фиксированный размер, а блок может увеличиваться вместе с его содержимым. Поэтому я бы поместил fo:block внутри контейнера и применил границу к этому блоку.

person Hobbes    schedule 24.05.2018
comment
Уже пробовал это, и происходит то, что граница всегда настраивает свою ширину на самый большой тег, содержащий fo:block, поэтому, например, применение границы к fo:block внутри fo:container делает ширину границы такой же, как у fo:container width, но уберите fo:container, и вы увидите, что теперь ширина границы такая же, как в fo:region-body. - person Evandro Teixeira; 24.05.2018
comment
сейчас у меня под рукой нет моей машины для разработки, но вы можете проверить, поддерживает ли fo:inline границы... - person Hobbes; 24.05.2018
comment
Они поддерживают границы, но ширина по-прежнему подходит для самого большого контейнера. - person Evandro Teixeira; 24.05.2018