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

如何避免XSL-FO生成PDF时出现多余空白页

移除FO生成PDF中的空白页问题

使用Apache FOP或Compart DocBridgeMill渲染FO代码时,生成的PDF出现多余空白页,页面结构如下:

  • "Page 1 of 1"
  • 空白页
  • "Page 1 of 2"
  • "Page 2 of 2"

问题根源

  1. 冗余的页面序列:第二个<fo:page-sequence>仅包含对第三个序列中ID的页码引用,无实质内容,且使用了PageSequence模板(强制首页使用FirstPage样式),导致生成无内容的空白页。
  2. 页码序列错误打断:第二个序列设置initial-page-number="1",强行重置页码,同时拆分的两个序列(第二个和第三个)造成不必要的页面生成。

解决方案

删除冗余的第二个<fo:page-sequence>,将其内容合并到第三个序列中,调整序列模板与页码设置,确保逻辑连贯。

修改后的FO代码

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master 
             margin-top="5mm" margin-left="10mm"
            page-width="210mm" page-height="50mm" master-name="FirstPage">
            <fo:region-body />
        </fo:simple-page-master>
        <fo:simple-page-master 
             margin-top="10mm" margin-left="10mm"
            page-width="210mm" page-height="50mm" master-name="OtherPage">
            <fo:region-body />
        </fo:simple-page-master>
        <fo:page-sequence-master
            master-name="PageSequence">
            <fo:single-page-master-reference
                master-reference="FirstPage" />
            <fo:repeatable-page-master-reference
                master-reference="OtherPage" />
        </fo:page-sequence-master>
        <fo:page-sequence-master
            master-name="FollowingPages">
            <fo:repeatable-page-master-reference
                master-reference="OtherPage" />
        </fo:page-sequence-master>
    </fo:layout-master-set>
    <fo:page-sequence initial-page-number="1"
        master-reference="PageSequence">
        <fo:flow flow-name="xsl-region-body">
            <fo:block>
                Page
                <fo:page-number />
                of
                <fo:page-number-citation
                    ref-id="5DAF3593E443DF58C1258934005BD76B" />
            </fo:block>
            <fo:block id="5DAF3593E443DF58C1258934005BD76B" />
        </fo:flow>
    </fo:page-sequence>
    <fo:page-sequence initial-page-number="1"
        master-reference="PageSequence">
        <fo:flow flow-name="xsl-region-body">
            <fo:block>
                Page
                <fo:page-number />
                of
                <fo:page-number-citation
                    ref-id="0C36B169CFBCD3DFC12589360067818E" />
            </fo:block>
            <fo:block id="0C36B169CFBCD3DFC12589360067818E" />
        </fo:flow>
    </fo:page-sequence>
</fo:root>

说明

  • 移除原第二个无实质内容的页面序列,将原本第三个序列的内容合并到一个使用PageSequence模板的序列中,既保留首页样式,又避免空白页生成。
  • 调整后的代码会正确生成"Page 1 of 1"、"Page 1 of 2"、"Page 2 of 2"的页面,无多余空白页。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:22:04