XSLFO:使用XSL Formatter时,4倍数页数的补充页如何置于版权页前?
问题分析与解决方案
需求概述
- 封面页 + 1张空白页:无页数强制要求
- 若干章节:页数不限,无强制要求
- 倒数第二的「注释」章节:至少2页,强制偶数页数
- 封底空白页 + 含版权声明的封底页:强制总页数为4的倍数(双偶数)
当前问题
封底部分为凑够4的倍数自动添加的空白页,出现在含版权内容的封底页之后,需要调整为补充页放在版权封底页之前。
修改方案
问题根源在于你把force-page-count="end-on-doubly-even"加在了最后一个含版权的页面序列上,XSL Formatter会在该序列末尾补页。要实现补页前置,需调整页面序列结构,将强制计数的时机放在版权页之前:
- 新增一个空页面序列,专门用于在进入版权页前补全页数至4的倍数
- 版权页序列不再设置强制计数,避免重复补页
修改后的代码片段
<!-- 注释章节(保留原设置) --> <fo:page-sequence master-reference="XY-letter-page" force-page-count="even" font-family="Arial"> <fo:static-content flow-name="XY-letter-page-header"> <fo:block text-align="center"> </fo:block> <fo:block font-size="12pt" font-weight="bold" border-bottom="thin solid black" text-align="center"> <fo:retrieve-marker retrieve-class-name="current-header"/> </fo:block> </fo:static-content> <fo:static-content flow-name="XY-letter-page-footer"> <fo:block font-size="9pt" font-weight="bold" text-align="center"> <fo:page-number/> </fo:block> </fo:static-content> <fo:flow flow-name="xsl-region-body"> <fo:marker marker-class-name="current-header">Notes</fo:marker> <fo:block/> </fo:flow> </fo:page-sequence> <!-- 新增:前置补页序列,凑够4的倍数后再进入封底内容 --> <fo:page-sequence force-page-count="end-on-doubly-even" master-reference="XY-letter-back-cover-page" font-family="Arial"> <fo:flow flow-name="xsl-region-body"> <!-- 空内容,仅触发补页逻辑 --> </fo:flow> </fo:page-sequence> <!-- 封底空白页(保留原设置) --> <fo:page-sequence force-page-count="no-force" master-reference="XY-letter-back-cover-page" font-family="Arial"> <fo:static-content flow-name="XY-letter-back-cover-footer"> <fo:block font-size="9pt" font-weight="bold" text-align="center"><fo:retrieve-marker retrieve-class-name="pub-id"/> - Page <fo:page-number/></fo:block> </fo:static-content> <fo:flow flow-name="xsl-region-body"> <fo:marker marker-class-name="pub-id">XY 12345-1-OD-EN</fo:marker> </fo:flow> </fo:page-sequence> <!-- 含版权的封底页:移除强制计数,确保作为最后一页 --> <fo:page-sequence force-page-count="no-force" master-reference="XY-letter-back-cover-last-page" font-family="Arial"> <fo:static-content flow-name="XY-letter-back-cover-header"> <fo:block text-align="center"> </fo:block> <fo:block font-size="12pt" font-weight="bold" border-bottom="thin solid black" text-align="center"> <fo:retrieve-marker retrieve-class-name="current-header"/> </fo:block> </fo:static-content> <fo:static-content flow-name="XY-letter-back-cover-footer"> <fo:block font-size="9pt" font-weight="bold" text-align="center"><fo:retrieve-marker retrieve-class-name="pub-id"/> - Page <fo:page-number/></fo:block> </fo:static-content> <fo:static-content flow-name="XY-letter-back-cover-last-footer"> <fo:table table-layout="fixed" width="100%" font-size="9pt"> <fo:table-column column-number="1" column-width="50%"/> <fo:table-column column-number="2" column-width="50%"/> <fo:table-body> <fo:table-row> <fo:table-cell display-align="after"> <fo:block font-size="8pt"> <fo:inline margin-right="6pt"> <fo:retrieve-marker retrieve-class-name="pub-id"/> </fo:inline> <fo:inline> <fo:retrieve-marker retrieve-class-name="pub-date"/> </fo:inline> </fo:block> <fo:block font-size="8pt"> <fo:inline margin-right="6pt">Supersedes <fo:retrieve-marker retrieve-class-name="superseded-pub-id"/></fo:inline> <fo:inline> (<fo:retrieve-marker retrieve-class-name="superseded-pub-date"/>)</fo:inline> </fo:block> </fo:table-cell> <fo:table-cell display-align="after" text-align="end"> <fo:block font-size="8pt">©<fo:retrieve-marker retrieve-class-name="pub-year"/> X-Wing Technologies</fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </fo:static-content> <fo:flow flow-name="xsl-region-body"> <fo:marker marker-class-name="superseded-pub-id">XY 12345-1-OD-EN</fo:marker> <fo:marker marker-class-name="superseded-pub-date">September 2021</fo:marker> <fo:marker marker-class-name="pub-id">XY 12345-1-OD-EN</fo:marker> <fo:marker marker-class-name="pub-date">August 2023</fo:marker> <fo:marker marker-class-name="pub-month">August</fo:marker> <fo:marker marker-class-name="pub-year">2023</fo:marker> <fo:block break-before="page"> <fo:block-container top="7.5in" absolute-position="absolute"> <fo:block page-break-before="always" font-size="10pt">Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright Copyright </fo:block> </fo:block-container> <fo:block-container top="8.5in" absolute-position="absolute"> <fo:block font-size="8pt" space-before="0.5in">Advertising Advertising Advertising Advertising Advertising Advertising Advertising Advertising Advertising Advertising Advertising Advertising Advertising Advertising </fo:block> </fo:block-container> </fo:block> </fo:flow> </fo:page-sequence>
关键说明
- 前置补页序列使用封底空白页的master,保证补出的页面样式统一
- 强制计数逻辑提前到版权页之前,确保补页全部出现在封底空白页和版权页之前
- 版权页设置为
no-force,避免在末尾再次生成多余页面
内容的提问来源于stack exchange,提问作者drLocke97
相关产品推荐
相关产品推荐

