关于fo:retrieve-marker的retrieve-boundary属性及标记匹配的技术问询
一、基础场景问询解答
首先明确XSL-FO中<fo:retrieve-marker>的核心匹配逻辑:retrieve-boundary定义搜索对应retrieve-class-name标记的范围,retrieve-position(默认取last)指定取范围内的第一个或最后一个匹配标记。假设三个footer标记的配置为:
lastPage:retrieve-boundary="page"(仅搜索当前页)continuedLine:retrieve-boundary="page-sequence"(搜索当前页面序列)continued:retrieve-boundary="document"(搜索整个文档)
以下是三种CASE的第二页footer匹配结果:
CASE A
page1标记顺序:continued → lastPage,分页后page2放置continuedLine标记
lastPage:当前页(page2)无lastPage类标记,无匹配内容continuedLine:页面序列内最后一个continuedLine标记是page2的该标记,匹配page2的continuedLinecontinued:整个文档内最后一个continued标记是page1的该标记,匹配page1的continued
CASE B
page1标记顺序:continued → lastPage → continuedLine,分页生成page2
lastPage:当前页(page2)无lastPage类标记,无匹配内容continuedLine:页面序列内最后一个continuedLine标记是page1的该标记,匹配page1的continuedLinecontinued:整个文档内最后一个continued标记是page1的该标记,匹配page1的continued
CASE C
page1放置continued标记,分页后page2标记顺序:lastPage → continuedLine
lastPage:当前页(page2)的lastPage标记是页内最后一个该类标记,匹配page2的lastPagecontinuedLine:页面序列内最后一个continuedLine标记是page2的该标记,匹配page2的continuedLinecontinued:整个文档内最后一个continued标记是page1的该标记,匹配page1的continued
二、补充场景问询解答
retrieve-boundary的作用是限制<fo:retrieve-marker>搜索对应class-name标记的范围,而非控制是否调用该retrieve-marker元素:
- 无论
retrieve-boundary设为何值,footer中的每个<fo:retrieve-marker>都会被处理器解析执行 - 它的核心逻辑是:在指定范围内(当前页/页面序列/整个文档)查找匹配
retrieve-class-name的标记,若找到则输出标记内容;若未找到,则无输出(或使用默认值,取决于处理器实现)
你看到所有retrieve-marker都被“调用”,是因为处理器会遍历每个retrieve-marker元素执行搜索逻辑,只是当范围内无匹配标记时,该元素不会输出内容而已。
内容的提问来源于stack exchange,提问作者Rito Sarkar
相关产品推荐
相关产品推荐

