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

Apache FOP生成PDF时如何为XML空Text标签添加空白行

解决Apache FOP中空标签生成空白行的问题

问题分析

当前XSLT遍历<Text>节点时,空节点的<xsl:value-of select="."/>会输出空内容,而white-space="pre"仅保留已有空白字符,空内容的<fo:block>不会生成可见空白行。要实现空标签对应空白行,需确保空节点对应的block有可被pre模式保留的换行或空白元素。

修改方案

通过判断<Text>节点是否为空,为空时输出一个换行符(&#10;),配合white-space="pre"即可生成空白行;非空节点则正常输出原有内容。

修改后的XSLT代码

分支判断写法

<xsl:for-each select="Text">
    <fo:table-row>
        <fo:table-cell>
            <fo:block font-family="Courier" font-size="7pt" font-weight="normal" display-align="center" white-space="pre">
                <xsl:choose>
                    <xsl:when test="normalize-space(.) = ''">
                        <xsl:text>&#10;</xsl:text>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="."/>
                    </xsl:otherwise>
                </xsl:choose>
            </fo:block>
        </fo:table-cell>
    </fo:table-row>
</xsl:for-each>

简洁拼接写法

<xsl:for-each select="Text">
    <fo:table-row>
        <fo:table-cell>
            <fo:block font-family="Courier" font-size="7pt" font-weight="normal" display-align="center" white-space="pre">
                <xsl:value-of select="concat(., if(normalize-space(.)='') then '&#10;' else '')"/>
            </fo:block>
        </fo:table-cell>
    </fo:table-row>
</xsl:for-each>

效果说明

修改后,空的<Text>标签会输出一个换行符,white-space="pre"会保留该换行,从而在PDF中生成对应空白行;非空节点的原有空格、格式依然会被完整保留,最终输出与期望一致。


内容的提问来源于stack exchange,提问作者Pooja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:24:53