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

How can I limit in xsl-fo to print at maximum 3 rows for column?

所以示例代码:

<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 由用户的某些输入动态生成。

根据下面的新评论,我能想到的适用于所有格式化程序的唯一方法是估计让您进入第三行的字符数。你可以是大概的,比如我会选择一个平均的内容量,然后统计字符数,把你放在第三行的中间。

然后,在您的 XSL 中实现一个 if 来添加这些属性,如下所示:

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

因此,任何超过三行的内容都会有高度和溢出,任何小于三行的内容都不会有,只会是内容的高度。

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