Apache FOP:如何仅从首页隐藏表头?

时间:2018-08-01 21:42:05

标签: xslt pdf-generation xsl-fo apache-fop

我有一个使用Apache FOP生成的文档,该文档具有多页动态表,该表具有 fo:table-header ,并使用 fo:marker < / strong>和 fo:retrieve-table-marker

<fo:table-header>
    <fo:table-row>
        <--! column title cells here -->
    </fo:table-row>
    <fo:table-row>
        <fo:table-cell number-columns-spanned="4">
            <fo:block>Übertrag</fo:block>
        </fo:table-cell>

        <fo:table-cell>
            <fo:block>
                <fo:inline>
                    <fo:retrieve-table-marker retrieve-class-name="totalsMarkerHeader"
                                              retrieve-position-within-table="last-ending-within-page"
                                              retrieve-boundary-within-table="table"/>
                </fo:inline>
            </fo:block>
        </fo:table-cell>
    </fo:table-row>
</fo:table-header>

<fo:table-body>
    <xsl:for-each select="items/item">
        <fo:table-row page-break-inside="avoid">
            <--! data table cells here -->
                <fo:block>
                    <fo:marker marker-class-name="totalsMarkerHeader">
                        <xsl:value-of select="format-number(sum(preceding::total_price),'€#,##0.00')"/>
                    </fo:marker>
                </fo:block>
        </fo:table-row>
    </xsl:for-each>
</fo:table-body>

这很好用,除了在第一页上此行无用之外,我想从第一页上将其删除,然后将其放在文档的其他每一页上。

我要寻找的是与 fo:table 的“ 省略省略标题”属性完全相反的选项。

我遇到了不同渲染引擎的以下选项:

  1. fpc: table-omit-header-at-start =“ true”
  2. rx: table-omit-initial-header

...但是找不到适用于apap fop的东西。

是否有一种解决方法可以对Apache FOP和标准XSL-FO进行类似的操作?


我还尝试对标题中的总和行使用条件可见性:

<xsl:if test="position() > 1">
    <fo:table-row>
    ...
    </fo:table-row>
</xsl:if>

不幸的是,似乎并没有在每个页面上都评估标头条件,而是在第一页上执行了一次,使得该行在所有页面上都不可见(不仅仅是我期望的第一页)。

2 个答案:

答案 0 :(得分:0)

如果文档中带有此表的部分可以隔离为单个页面序列,则:

1)设置具有不同首页的页面顺序(因此请使用第一页和任何一页)

2)在除第一个页面之外的所有页面的页面模板中,在之前的区域中创建一个匹配的简单单行表,将其设置在最底端,以便它落在您体内的表顶部。经过精心计划,您可以使页眉中的小表看起来像是“表头”,即使它位于页面页眉中。

3)显然,除非您愿意,否则不要在首页上放置任何标题,当然也不要在正文中的表上放置任何标题,您可以在此处放置完全不同的内容,因为它是第一页之前的区域。

4)您可以使用常规标记来保持运行总计,并将该标记拉到后面页面标题中的表中。

答案 1 :(得分:0)

添加一个空的where person0_.person_id is null fo:marker仅在第一页上将其拾取。