以下 FO 代码是通过 XSL 转换创建的。结果应是包含多个页面的长 PDF。第 1 页的内容可能会溢出到下一页。可能需要特意添加另一个页面(本例中为第 2 页,共 2 页)。当我通过 FO 解释器运行示例时(我尝试了 Apache 的 FOP 以及 Compart 的 DocBridgeMill),我得到了这个 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
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:flow>
</fo:page-sequence>
<fo:page-sequence master-reference="FollowingPages">
<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>
XSL-FO 的编写假设是奇数页位于两页跨页的正面(对于我们来说是左侧),而偶数页位于反面(背面或右侧)。
第二个
initial-page-number="1"
上的 fo:page-sequence
导致格式化程序在第一个页面序列之后发出空白页面,以便第二个页面序列按照请求从右页开始(但是无意中)。请参阅https://www.w3.org/TR/xsl11/#initial-page-number
如果您使用 Antenna House Formatter(并将
xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions"
添加到 XSL-FO),您可以使用 axf:origin-id
扩展来获得您想要的效果。请参阅https://www.antenna.co.jp/AHF/help/en/ahf-ext.html#axf.origin-id
<fo:page-sequence initial-page-number="1" id="seq1"
master-reference="PageSequence">
<fo:flow flow-name="xsl-region-body">
<fo:block>
Page
<fo:page-number />
of
<fo:page-number-citation-last
ref-id="seq1" />
</fo:block>
</fo:flow>
</fo:page-sequence>
<fo:page-sequence id="seq2"
master-reference="PageSequence">
<fo:flow flow-name="xsl-region-body">
<fo:block>
Page
<fo:page-number axf:origin-id="seq2" />
of
<fo:page-number-citation axf:origin-id="seq2"
ref-id="seq-last" />
</fo:block>
</fo:flow>
</fo:page-sequence>
<fo:page-sequence master-reference="FollowingPages"
id="seq-last">
<fo:flow flow-name="xsl-region-body">
<fo:block>
Page
<fo:page-number axf:origin-id="seq2" />
of
<fo:page-number-citation-last axf:origin-id="seq2"
ref-id="seq-last" />
</fo:block>
</fo:flow>
</fo:page-sequence>