XSL-FO:根据文本宽度调整边框宽度

时间:2018-05-23 20:34:00

标签: xml xslt xsl-fo apache-fop

我在使用Apache FOP作为处理器的XSL-FO遇到了麻烦。我有一个简单的样式表,并且已经为fo:block-container设置了一个圆形边框。问题是:文本大小是不可预测的,因为.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>

Here is a sample image showing the desired output

1 个答案:

答案 0 :(得分:0)

块容器通常具有固定的大小,而块可以随其内容一起生长。因此,我在容器内放置一个fo:块,并将边框应用于该块。