You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XSL FO(FOP)中添加无页眉页脚的附加页面?

解决XSL FO(FOP)中条款页无页眉的需求

要实现条款页无页眉且文本从页面顶部开始,核心是新增专属页面模板,并通过独立页面序列调用它,具体操作如下:

1. 新增无页眉的页面模板

在fo:layout-master-set中添加一个simple-page-master,不定义页眉区域fo:region-before,同时将内容区域fo:region-body的顶部边距设为0,让文本直接从页面顶部开始:

<fo:simple-page-master master-name="terms-pages" margin="1in">
  <fo:region-body margin-top="0"/>
</fo:simple-page-master>

2. 拆分页面序列

原代码所有内容共用一个页面序列,导致条款页继承了普通页面的页眉模板。将发票主体和条款内容拆分为两个独立的fo:page-sequence:

  • 发票主体继续使用原有的main-master模板
  • 条款内容直接调用新增的terms-pages模板

3. 修改后的完整代码

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
    <fo:simple-page-master master-name="first-page" margin="1in">
      <fo:region-body margin-top="15mm"/>
      <fo:region-before extent="10mm" region-name="xsl-region-before-first-page"/>
    </fo:simple-page-master>
    <fo:simple-page-master master-name="other-pages" margin="1in">
      <fo:region-body margin-top="15mm"/>
      <fo:region-before extent="10mm" region-name="xsl-region-before-other-pages"/>
    </fo:simple-page-master>
    <!-- 新增条款页专属模板 -->
    <fo:simple-page-master master-name="terms-pages" margin="1in">
      <fo:region-body margin-top="0"/>
    </fo:simple-page-master>
    <fo:page-sequence-master master-name="main-master">
      <fo:repeatable-page-master-alternatives>
        <fo:conditional-page-master-reference master-reference="first-page" page-position="first"/>
        <fo:conditional-page-master-reference master-reference="other-pages"/>
      </fo:repeatable-page-master-alternatives>
    </fo:page-sequence-master>
  </fo:layout-master-set>

  <!-- 发票主体页面序列 -->
  <fo:page-sequence master-reference="main-master">
    <fo:static-content flow-name="xsl-region-before-first-page">
      <fo:block font-size="36pt" background-color="#ff0000">Header for the first page</fo:block>
    </fo:static-content>
    <fo:static-content flow-name="xsl-region-before-other-pages">
      <fo:block font-size="36pt" background-color="#0000ff">Header for other pages</fo:block>
    </fo:static-content>
    <fo:flow flow-name="xsl-region-body">
      <!-- 发票主体内容 -->
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
      <fo:block font-size="36pt">Row of document</fo:block>
    </fo:flow>
  </fo:page-sequence>

  <!-- 条款内容页面序列 -->
  <fo:page-sequence master-reference="terms-pages">
    <fo:flow flow-name="xsl-region-body">
      <!-- 强制从新页面开始 -->
      <fo:block page-break-before="always"/>
      <fo:block font-size="36pt">Some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text, some other text</fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

关键说明

  • 拆分页面序列是最直观的实现方式,避免了单个序列中复杂的条件判断,便于后续维护不同模块的页面样式。
  • 条款页模板未定义页眉区域,因此不会显示任何页眉;region-body的margin-top="0"确保文本紧贴页面顶部,可根据需求调整为合适的边距。

内容的提问来源于stack exchange,提问作者Jirin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 22:48:10