如何限制xsl-fo打印最多3行的列?

时间:2015-03-23 15:10:42

标签: xml xslt xsl-fo apache-fop

示例代码:

<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

1 个答案:

答案 0 :(得分:1)

根据下面的新评论,我能想到的唯一可以与所有格式化程序配合使用的方法是估算第三行中可能出现的字符数。您可以是近似值,就像我选择平均内容量并计算将您置于第三行中间的字符数。

然后,在你的XSL中实现if if添加这样的属性:

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

所以三行或更多行的任何东西都会有高度和溢出,任何小于它的东西都不会有任何东西,只会是内容的高度。

它不是完全通用的,但可以用于已知宽度和内容的字体大小。