我正在使用XSL-FO来创建PDF。现在我有一个标签,我只想在第一页上显示,另一个标签我要在所有其他页面上显示,例如。
Last month's balance
Previous page's balance
整个PDF实际上只是一个简单的表,所以这不是一个站在数据之外的封面。我该怎么办?
另请参阅此相关问题:How can I sum up some values per page in a table in XSL-FO?
答案 0 :(得分:2)
这个可以使用fo:marker和fo:retrieve-marker(来自fo:static-content),或者在fo:page-sequence-master的帮助下实现,它提供了不同的fo:simple-page-第一页的主条目(@ page-position =“first”)和其他页面(=“rest”)。
在后一种情况下,您需要以不同的方式在不同的simple-page-masters上命名静态区域,并在每个页面母版的fo:page-sequence中提供fo:static-content。
答案 1 :(得分:2)
我没有尝试Michael Sulyaev's suggestion about page-sequence-master来解决这个问题。但是,使用<fo:marker/>
和<fo:retrieve-marker/>
似乎有效。我不确定这是否是一个有效的XSL-FO解决方案,但它适用于Apache fop。
根据w3.org specification,<fo:retrieve-marker/>
是<fo:static-content/>
后代似乎很重要。它不能成为表格本身的一部分。
<fo:static-content flow-name="xsl-region-before">
<fo:table>
<!-- Render <fo:table-column/> elements -->
<xsl:call-template name="TableColumns"/>
<!-- fo:table-body, fo:table-row, fo:table-cell, fo:block
omitted for the example -->
<fo:retrieve-marker retrieve-class-name="carryover-label"/>
</fo:table>
</fo:static-content>
然后,<fo:marker/>
元素位于数据表本身中:
<fo:flow flow-name="xsl-region-body">
<fo:table>
<!-- Render the same <fo:table-column/> elements -->
<xsl:call-template name="TableColumns"/>
<fo:table-body>
<xsl:for-each select="/data-path">
<!-- fo:table-row, fo:table-cell, fo:block
omitted for the example -->
<xsl:choose>
<xsl:when test="position() = 1">
<fo:marker marker-class-name="carryover-label">
Last month's balance</fo:marker>
</xsl:when>
<xsl:otherwise>
<fo:marker marker-class-name="carryover-label">
Last page's balance</fo:marker>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</fo:table-body>
</fo:table>
</fo:flow>
现在,这两个表只需要一个在另一个上面。对于我的问题,这是一个有效的解决方法。