XSL-FO如何检查keep-together是否生效

时间:2014-01-30 15:54:45

标签: xsl-fo

我想创建一个解析XML的AFP。 因此我确实使用了两张桌子。 (我需要那些表,它是一个账单)

一切运作良好,但我无法弄清楚如何实施以下要求:

  • "保持在一起"第二个表。只显示第二个表的标题,如果它在一个单独的页面上(不在与表一的同一页面上)。

所以如果第二个表可以放在与第一个表相同的页面中,我想淡出标题。如果第二个表因为"保持在一起而进入下一页",我想显示标题

所以我确实有第二张桌子,#34;保持在一起"像这样:

<fo:table table-layout="fixed" width="180mm" keep-together.within-page="always">

我现在正在寻找一种方法,以找出在特定情况下如何更改此标题。 XSL-FO甚至可以实现吗? (我想像这样:)

<xsl:if test="$keep-together.within-page !=''">
  <fo:table-header>
  ...
  </fo:table-header>
</xsl:if>

但是这不起作用。有人有想法吗?

抱歉我的英语不好。 非常感谢任何帮助!

欢呼声

1 个答案:

答案 0 :(得分:0)

  

如果第二个表可以放在与第一个表相同的页面中,我想淡出标题。如果第二个表因为“保持在一起”而进入下一页,我想显示标题

有一些选项可用于修改跨越分页符的单个表的标头。请参阅table-omit-header-at-breakrx:table-omit-initial-header(后者是XEP扩展名)。

但你所要求的是不可能的。表头的显示不能取决于表是否与另一个表位于同一输出页面上。


从XSL-FO创建AFP(或PDF)输出是一个具有两个独立阶段的过程:

  1. 生成所需的FO标记(将XSLT样式表应用于XML源文档是执行此操作的最常用方法)。
  2. 生成的标记由FO引擎处理,该引擎在一个或多个输出页面上布置内容。
  3. 你想象这样的事情:

    <xsl:if test="$keep-together.within-page !=''">
       ...
    </xsl:if>
    

    这是不可能的。这是试图模糊两个阶段之间的界限。在第1阶段,对第2阶段产生的实际页面一无所知。

    在XSL-FO中,您可以为各种突发事件指定规则(keep-with-nextkeep-togetherorphanswidows等属性的条件。但是没有办法测试表B是否与表A在同一页面上,或者属性是否已“生效”。它只是不起作用。