You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 16:27:26