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

Xml 如何限制xsl fo中的列最多打印3行?,xml,xslt,xsl-fo,apache-fop,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-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>

10磅
赫尔维蒂卡
大胆的
- 
我的问题是:

<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>

40磅
隐藏的
因此,任何三行或更大的内容都会有高度和溢出,任何小于三行的内容都不会有,并且只会是内容的高度


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

您能提供
x/y
x/z
的示例吗?我不明白它如何在表中生成多行。@potame它们只是一些字符串。。比如“foo-bar foo-foo-foo-bar bar”为什么说它不能在一个块中生成超过1行的文本?@potame我添加了一个例子。谢谢,它更清楚一点,但是对于溢出的文本,你想做什么呢?是否应丢弃?使用具有固定高度的块容器,并设置溢出以剪切内容。您需要根据字体大小设置高度,以便只获得所需的行。谢谢,但是现在如果文本只有一行,块仍将是我不喜欢的三行。谢谢,但我已经在用于生成字符串的velocity模板中尝试了这一点。但不幸的是,有时文本会太短,有时会溢出到第四行。无论如何,谢谢。这可能是因为使用了长字符串,而且你无法控制断点的位置。如您的示例所示,该行很早就断开,上面有空格。您只能在FO中剪裁它,或者您必须执行两步过程并计算打断和设置高度。