Apache FOP无法设置inline-container固定宽度导致文本溢出问题
XSL-FO内联容器固定宽度不生效修复方案
问题原因
- 多数XSL-FO渲染引擎(如Apache FOP)中,
fo:inline-container的行内方向尺寸由inline-progression-dimension属性控制,单独设置width/max-width不会触发容器收缩,默认配置下内容会直接溢出容器边界。 - 原代码中
padding-right="200pt"的配置和40px的宽度要求完全冲突,过大的内边距会直接把容器内容区撑出目标宽度。 - 未配置溢出处理规则时,即使容器宽度生效,超长文本依然会突破容器边界覆盖右侧元素。
可直接复用的修复代码
核心调整点:显式声明行内方向尺寸、移除冲突的大padding配置、增加溢出处理规则
<xsl:if test="$vsadek/xy"> <fo:inline-container inline-progression-dimension="40px" width="40px" max-width="40px" overflow="hidden" padding-right="4px"> <fo:block font-weight="bold" wrap-option="wrap" overflow="hidden"> <xsl:value-of select="$vsadek/xy"></xsl:value-of> <xsl:if test="$vsadek/ab"> <xsl:text>, </xsl:text> <xsl:value-of select="$vsadek/ab"></xsl:value-of> </xsl:if> </fo:block> </fo:inline-container> </xsl:if>
补充配置说明
- 如果不需要和同行内其他元素横向并排,直接替换为
fo:block-container即可,块级容器对width属性的兼容性更好,无需额外配置inline-progression-dimension就能实现固定宽度效果。 - 如果需要超长文本显示省略号,给内部
fo:block增加text-overflow="ellipsis"属性即可,该属性在Apache FOP 2.6及以上版本生效。 - 如果配置后依然存在溢出问题,检查父级容器是否设置了
wrap-option="no-wrap"或white-space-treatment="preserve"强制不换行,这类父级属性优先级高于子容器的宽度限制,需要同步调整。
内容的提问来源于stack exchange,提问作者pecvari
相关产品推荐
相关产品推荐

