3

如果页数超过一页,我想在页脚中添加页码,但如果只有一页,则不需要。

我尝试了以下代码,但它在所有情况下都显示页码:

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
        <fo:layout-master-set>
            <fo:simple-page-master master-name="singlePage" page-height="800pt" page-width="612pt" margin-top="0pt" margin-bottom="46pt" margin-left="26pt" margin-right="26pt">
                <fo:region-body margin-top="110pt" margin-bottom="65pt" />
                <fo:region-before extent="72pt" />
                <fo:region-after region-name="xsl-region-after-single" extent="75pt" />
            </fo:simple-page-master>

            <fo:simple-page-master master-name="multiPage" page-height="800pt" page-width="612pt" margin-top="0pt" margin-bottom="46pt" margin-left="26pt" margin-right="26pt">
                <fo:region-body margin-top="110pt" margin-bottom="65pt" />
                <fo:region-before extent="72pt" />
                <fo:region-after region-name="xsl-region-after-multi" extent="75pt" />
            </fo:simple-page-master>

            <fo:page-sequence-master master-name="allPages">
                <fo:repeatable-page-master-alternatives>
                   <fo:conditional-page-master-reference page-position="any" master-reference="multiPage"/>
                   <fo:conditional-page-master-reference page-position="only" master-reference="singlePage"/>
                </fo:repeatable-page-master-alternatives>
            </fo:page-sequence-master>
        </fo:layout-master-set>

        <fo:page-sequence master-reference="allPages">
            <fo:static-content flow-name="xsl-region-before">
                <fo:block>content</fo:block>
            </fo:static-content>
            <fo:static-content flow-name="xsl-region-after-single">
                <fo:block>content</fo:block>
            </fo:static-content>
            <fo:static-content flow-name="xsl-region-after-multi">
                    <fo:block>content</fo:block>
                    <fo:block text-align="right">
                        <fo:inline><fo:page-number font-weight="normal"/>/<fo:page-number-citation ref-id = "lastPage"/></fo:inline>
                    </fo:block>
            </fo:static-content>
            <fo:flow flow-name="xsl-region-body" font-size="12pt" line-height="11pt">
                <fo:block>content</fo:block>
                <fo:block id = "lastPage"/>
            </fo:flow>
        </fo:page-sequence>
    </fo:root>

如果我更改替代品的顺序,则永远不会显示页码:

<fo:page-sequence-master master-name="allPages">
    <fo:repeatable-page-master-alternatives>
        <fo:conditional-page-master-reference page-position="only" master-reference="singlePage"/>
        <fo:conditional-page-master-reference page-position="any" master-reference="multiPage"/>
    </fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>

我正在使用 FOP 2.0

感谢您的回答。

4

1 回答 1

3

您的第二个替代方案适用于 FOP 2.0 和 FOP 2.2:

<fo:page-sequence-master master-name="allPages">
    <fo:repeatable-page-master-alternatives>
        <fo:conditional-page-master-reference page-position="only" master-reference="singlePage"/>
        <fo:conditional-page-master-reference page-position="any" master-reference="multiPage"/>
    </fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>

您是否尝试了足够的内容来制作第二页?例如,添加<fo:block break-before="page">content</fo:block>强制第二页。

如果您更改fo:static-contentfor the中的“内容”文本,fo:region-after那么您将更好地了解fo:conditional-page-master-reference正在使用的内容;例如:

<fo:static-content flow-name="xsl-region-after-single">
   <fo:block>after single</fo:block>
</fo:static-content>

fo:conditional-page-master-reference( https://www.w3.org/TR/xsl11/#fo_conditional-page-master-reference )的工作方式是,如果它是所有子条件都为真的第一个备选方案,则选择它。如果有足够的内容来制作第二页,则page-position="only"子条件不再为真,因此格式化程序应使用其他替代方案再次尝试。

格式化程序应该再试一次,因为如果没有,那么fo:repeatable-page-master-alternativeshttps://www.w3.org/TR/xsl11/#fo_repeatable-page-master-alternatives)不满足其约束(我的重点):

如果(a)页面的子序列由零个或多个页面组成,(b)每个页面使用fo:simple-page-master 由作为 fo:repeatable-page-master-alternatives 的子项的备选方案之一引用,(c)该备选方案的条件为真,(d) 该备选方案是第一个备选方案在所有条件都为真的子序列中,并且 (e) 子序列的长度小于或等于“最大重复次数”的值。

于 2018-11-08T09:13:31.340 回答