Apache FOP生成PDF时如何为XML空Text标签添加空白行
解决Apache FOP中空标签生成空白行的问题
问题分析
当前XSLT遍历<Text>节点时,空节点的<xsl:value-of select="."/>会输出空内容,而white-space="pre"仅保留已有空白字符,空内容的<fo:block>不会生成可见空白行。要实现空标签对应空白行,需确保空节点对应的block有可被pre模式保留的换行或空白元素。
修改方案
通过判断<Text>节点是否为空,为空时输出一个换行符( ),配合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> </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 ' ' else '')"/> </fo:block> </fo:table-cell> </fo:table-row> </xsl:for-each>
效果说明
修改后,空的<Text>标签会输出一个换行符,white-space="pre"会保留该换行,从而在PDF中生成对应空白行;非空节点的原有空格、格式依然会被完整保留,最终输出与期望一致。
内容的提问来源于stack exchange,提问作者Pooja
相关产品推荐
相关产品推荐

