在表行上有“keep-together ='always'”的替代方案吗?

时间:2012-12-18 11:46:13

标签: xslt xsl-fo apache-fop

找到“keep-together”属性,并且需要不在一行内分页时,我在xslt中的每个table-row元素上添加了keep-together="always"。 有没有更好的方法来达到同样的效果?看起来有点hacky。 (ps。如果没有人提供更好的答案,我会接受“否”作为答案,前提是提供了某种解释。)

4 个答案:

答案 0 :(得分:15)

keep-together="always"很危险,因为这是一个复合属性,也间接设置keep-together.within-line="always"(禁止在表格单元格内换行)。您应该使用keep-together.within-column="always"代替。但是在表行上指定它实际上是要走的路。没什么好看的。

另请参阅:http://www.w3.org/TR/xsl11/#datatype

答案 1 :(得分:1)

当我需要将表锁定在一起时,这个答案解决了我在分页符中流过的表行的问题。我使用了<fo:table keep-together="always"></fo:table> 感谢。

答案 2 :(得分:1)

我使用以下三种方法将表行保持在一起并取得了一些成功:

保持整个区块

<tr keep-together.within-page="always">
...
</tr>

将相邻的块保持在一起

<tr keep-with-next.within-page="always">
    <td keep-together.within-page="always">...</td>
    ...
</tr>
<tr>...</tr>

<tr>...</tr>
<tr keep-with-previous.within-page="always">
    <td keep-together.within-page="always">...</td>
    ...
</tr>

虽然您必须小心 - 如果行或单元格跨越生成文档的多个页面,您将从底部松开该页面的底部!

答案 3 :(得分:1)

使用处理整数保持的XSL格式化程序,您可以使用整数值,以便格式化程序将尝试将行保持在一起,但会破坏行而不是在页面末尾运行。但是,此问题已标记为FOP,FOP的合规性页面目前声明它对整数保留(http://xmlgraphics.apache.org/fop/compliance.html#fo-property-keep-together)的支持有限,因此YMMV。