如何在两个XSL模板之间添加分页符
在两个XSL-FO模板之间添加分页符或空白区域的解决方案
要在content_name和pro_list这两个模板之间实现分页或者添加空白区域,有几种简单直接的方法,你可以根据实际渲染场景选择:
1. 强制分页:给第一个模板的块添加分页后属性
如果希望渲染完content_name的内容后直接跳到下一页,直接在它的fo:block里加上page-break-after="always"属性即可。不管当前页剩余多少空间,都会强制触发分页:
<xsl:template match="content_name"> <fo:block space-after="7pt" space-after.conditionality="retain" line-height="1.147" font-family="Calibri" font-size="15pt" font-weight="bold" language="FR" page-break-after="always"> <!-- 强制在该块后分页 --> <!-- 别忘了在这里输出内容,比如<xsl:value-of select="." /> --> </fo:block> </xsl:template>
2. 强制分页:给第二个模板的块添加分页前属性
反过来,也可以在pro_list的fo:block里添加page-break-before="always",这样在渲染这个模板的内容之前会自动分页:
<xsl:template match="pro_list"> <fo:block space-after="15pt" space-after.conditionality="retain" line-height="1.147" font-family="Calibri" page-break-before="always"> <!-- 渲染该块前强制分页 --> <!-- 这里放置pro_list的内容 --> </fo:block> </xsl:template>
3. 只添加空白区域(不分页)
如果不需要分页,只是想在两个内容块之间留一段空白,有两种实现方式:
- 直接增大第一个模板
fo:block的space-after值,比如改成space-after="50pt" - 或者在调用两个模板的主逻辑中插入一个空块来占据空间:
<!-- 假设在主模板中依次调用两个模板 --> <xsl:apply-templates select="content_name"/> <!-- 插入固定高度的空白块 --> <fo:block height="30pt" space-after.conditionality="retain"/> <xsl:apply-templates select="pro_list"/>
小提示
- 使用
page-break-after或page-break-before时,属性值设为always才会强制分页;如果用auto,则只有当内容放不下当前页时才会分页 - 主流XSL-FO处理器(比如Apache FOP、RenderX XEP)都支持这些分页属性,不用担心兼容性问题
内容的提问来源于stack exchange,提问作者snehamayi senapati
相关产品推荐
相关产品推荐

