如何移除fo:static-content与fo:flow之间的自动边距?
解决XSL-FO中static-content与flow之间的边距问题
问题根源不在fo:static-content或fo:flow的内边距/外边距设置,而是页面区域(region)的配置和内容容器的高度匹配问题,按以下步骤调整即可解决:
匹配页面区域与内容高度
你的fo:simple-page-master里,fo:region-before的extent设为20mm,同时fo:region-body的margin-top也是20mm,但static-content内的fo:block-container高度仅为20px,远小于20mm,导致region-before区域剩余空间形成留白,叠加region-body的margin-top后产生额外边距。
修改区域配置,让extent和margin-top与内容容器高度一致:<fo:simple-page-master master-name="A4" page-width="210mm" page-height="297mm" margin="10mm"> <fo:region-body margin-top="20px" margin-bottom="20mm"/> <fo:region-before extent="20px"/> <fo:region-after extent="20mm"/> </fo:simple-page-master>清除块元素默认间距
fo:block和fo:table默认带有上下间距,需手动清除:- 给
static-content内的fo:block添加space-after="0pt":<fo:block space-after="0pt"> <!-- 原有内容 --> </fo:block> - 给
flow内第一个fo:table添加space-before="0pt":<fo:table table-layout="fixed" width="556px" space-before="0pt"> <!-- 原有表格内容 --> </fo:table>
- 给
确认容器无额外间距
保持fo:block-container的padding="0px"和margin="0px"设置,避免继承样式产生额外间距。
关键修改后的代码片段
<fo:layout-master-set> <fo:simple-page-master master-name="A4" page-width="210mm" page-height="297mm" margin="10mm"> <fo:region-body margin-top="20px" margin-bottom="20mm"/> <fo:region-before extent="20px"/> <fo:region-after extent="20mm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:static-content flow-name="xsl-region-before"> <fo:block-container width="539.3px" height="20px" padding="0px" margin="0px" border-bottom="1pt solid black"> <fo:block space-after="0pt"> <!-- 原有内容 --> </fo:block> </fo:block-container> </fo:static-content> <fo:flow flow-name="xsl-region-body"> <xsl:for-each select="AppealPrintFormList/AppealPrintForm"> <fo:table table-layout="fixed" width="556px" space-before="0pt"> <!-- 原有表格内容 --> </fo:table> <!-- 后续内容 --> </xsl:for-each> </fo:flow>
调整后,页面区域高度与内容高度完全匹配,同时清除了块元素的默认间距,static-content与flow之间的额外边距会被移除。
内容的提问来源于stack exchange,提问作者Valery Proskuryakov
相关产品推荐
相关产品推荐

