使用XSL-FO生成PDF时如何仅在总页数大于1时显示页码
XSL-FO 单页隐藏页码实现方案
你可以通过以下两种常用方案实现需求:
方案1:两次转换法(兼容所有XSL-FO处理器)
这是兼容性最好的实现方式,步骤如下:
- 第一次预转换:先生成临时FO文件,通过处理器渲染后的临时结果统计总页数,将总页数存入变量
$totalPages - 第二次正式转换:在页脚页码渲染逻辑中增加条件判断,仅当
$totalPages > 1时输出页码标识
示例代码片段:
<xsl:variable name="totalPages" select="你的总页数统计逻辑"/> <fo:static-content flow-name="xsl-region-after"> <xsl:if test="$totalPages > 1"> <fo:block text-align="right"> <fo:page-number/>/<fo:page-number-citation-last ref-id="doc-end"/> </fo:block> </xsl:if> </fo:static-content> <!-- 文档末尾添加锚点用于获取最后一页页码 --> <fo:block id="doc-end"/>
方案2:单转换条件渲染(支持XSL-FO高级特性的处理器可用)
如果使用Apache FOP、RenderX等支持动态属性判断的处理器,可以直接在FO中通过条件属性控制显示:
- 在文档末尾添加id为
doc-end的空块作为总页数锚点 - 给页码块设置
display属性的条件判断:当最后一页页码等于1时隐藏,否则显示
示例代码片段:
<fo:static-content flow-name="xsl-region-after"> <fo:block text-align="right" display="{if (fo:page-number-citation-last('doc-end') = 1) then 'none' else 'block'}"> <fo:page-number/>/<fo:page-number-citation-last ref-id="doc-end"/> </fo:block> </fo:static-content> <fo:flow flow-name="xsl-region-body"> <!-- 你的文档正文内容 --> <fo:block id="doc-end"/> </fo:flow>
注意:如果使用的是低版本FOP,需要确认是否支持属性值中的条件表达式,不支持的情况降级使用方案1即可。
内容的提问来源于stack exchange,提问作者kieuanhvu
相关产品推荐
相关产品推荐

