Я не пробовал Предложение Михаила Суляева о master-sequence-master по этой проблеме. Однако использование <fo:marker/>
и <fo:retrieve-marker/>
, похоже, сработало. Я не уверен, является ли это допустимым решением XSL-FO, но оно работает с Apache fop.
Представляется важным, что <fo:retrieve-marker/>
является потомком <fo:static-content/>
, согласно спецификации w3.org . Он не может быть частью самой таблицы.
<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>
Теперь две таблицы должны располагаться ровно одна поверх другой. Для моей проблемы это правильный обходной путь.