定义中的注释
page-position
属性声明(添加强调):
其中几个值可以同时为真;例如,“any”
当“first”和“last”都为true时,“only”始终为true
真的。因此,
有必要订购
fo:有条件的页面主控引用,以便进行包含最少的测试
在更具包容性的测试之前执行
这也是正确的。
换句话说
conditional-page-master-reference
选择用于构建页面的是
第一个条件为真的
,甚至没有考虑以下参考文献。
另一个需要记住的重要点是(
页面位置
,
odd-or-even
,
blank-or-not-blank
)
选择页面母版,而不是特定的静态内容
.
所以,看看你的问题:
1.如果第一页是最后一页(只有一页),则最后一页页脚
不会出现。
这是因为第一个
条件页母版引用
在您的示例中,适用于第一页也是唯一一页的是指向
"masterNamePageFirst1"
该区域(我猜,因为这不是问题所在)有一个区域,之后只有“每一个页脚”被映射到该区域。
知道页面位置可以具有值“only”
也将为此设置一个静态内容。但我还是会
两个相同内容的块,每当我想编辑这个
部分,我得换两次。
你不必重复两次相同的内容:你可以
将其放入命名模板中
,并从两个静态内容内部调用该模板。
2.主集管通常可以由之前的区域设置
引用页面位置=“any”(这是标准),但不知为何
这对我不起作用。我只是得到了页面的标题
不是第一个或最后一个。这不应该是我们想要的功能吗
第页位置=“rest”
?
静态内容映射到区域:
检查该区域是否实际存在
在第一页和最后一页的页面母版中。
EDIT:完成示例
下面是一个示例,显示了这两种情况
不同的页面几何形状
仅适用于/first/rest/任意页面和
根据页面位置不同的页眉/页脚
使用
fo:marker
s
和
fo:retrieve-marker
s
.
我用FOP 1.1测试了它,生成的pdf应该符合您的规范。
<?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 master-name="singlePage" margin="1cm">
<fo:region-body margin-top="5cm" margin-bottom="4cm" background-color="#FFFFAA"/>
<fo:region-before extent="4cm" background-color="#AAFFFF"/>
<fo:region-after extent="3cm" background-color="#FFAAFF" display-align="after"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="firstPage" margin="1cm">
<fo:region-body margin-top="5cm" margin-bottom="2cm" background-color="#FFFFAA"/>
<fo:region-before extent="4cm" background-color="#AAFFFF"/>
<fo:region-after extent="1cm" background-color="#FFAAFF" display-align="after"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="middlePage" margin="1cm">
<fo:region-body margin-top="2cm" margin-bottom="2cm" background-color="#FFFFAA"/>
<fo:region-before extent="1cm" background-color="#AAFFFF"/>
<fo:region-after extent="1cm" background-color="#FFAAFF" display-align="after"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="lastPage" margin="1cm">
<fo:region-body margin-top="2cm" margin-bottom="4cm" background-color="#FFFFAA"/>
<fo:region-before extent="1cm" background-color="#AAFFFF"/>
<fo:region-after extent="3cm" background-color="#FFAAFF" display-align="after"/>
</fo:simple-page-master>
<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="first" master-reference="firstPage"/>
<fo:conditional-page-master-reference page-position="rest" master-reference="middlePage"/>
<fo:conditional-page-master-reference page-position="last" master-reference="lastPage"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="allPages">
<!--
header
-->
<fo:static-content flow-name="xsl-region-before" font-size="90%">
<!-- main header on every page -->
<fo:block>Text, logo, barcode</fo:block>
<!-- sub header -->
<fo:retrieve-marker retrieve-class-name="subHeader" retrieve-position="first-starting-within-page"/>
</fo:static-content>
<!--
footer
-->
<fo:static-content flow-name="xsl-region-after" font-size="90%">
<!-- special footer -->
<fo:retrieve-marker retrieve-class-name="footer" retrieve-position="first-starting-within-page"/>
<!-- common footer on every page -->
<fo:block>printing date dd/mm/yyyy</fo:block>
</fo:static-content>
<!--
document body
-->
<fo:flow flow-name="xsl-region-body">
<!-- empty blocks with markers for the header -->
<fo:block>
<!-- sub header for the first page -->
<fo:marker marker-class-name="subHeader">
<fo:block>LARGE SUB HEADER</fo:block>
</fo:marker>
</fo:block>
<fo:block>
<!-- sub header for the not-first pages -->
<fo:marker marker-class-name="subHeader">
<fo:block>small sub header</fo:block>
</fo:marker>
</fo:block>
<!-- normal content -->
<!--
YOUR REAL CONTENT GOES HERE
(I just put some blocks with page breaks to produce a few pages)
-->
<fo:block break-after="page">Long sequence with many pages ...</fo:block>
<fo:block break-after="page">... bla bla bla ...</fo:block>
<fo:block>... the end</fo:block>
<!-- empty block with marker for the footer -->
<fo:block>
<!-- footer for the last page -->
<fo:marker marker-class-name="footer">
<fo:block>TOTAL AMOUNT $$$ AND SIGNATURES</fo:block>
</fo:marker>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>