如何在XSL FO表格单元格中换行超长单词(超百字符)
XSL FO表格单元格长单词换行解决方案
1. 移除强制不换行属性
你的代码中fo:table-cell和fo:block都设置了keep-together.within-line="always",该属性会强制文本保持在同一行,是导致长单词无法换行的核心原因,先移除这两个属性。
2. 插入软换行符实现指定位置换行
针对下划线分隔的长文件名这类无空格的文本,可通过XSLT预处理在合适位置插入软连字符(­),让FO处理器自动在这些位置换行。同时配置块元素允许换行:
修改后的代码示例:
<fo:table-cell xsl:use-attribute-sets="table.cell" border-top="none"> <fo:block wrap-option="wrap" hyphenate="true"> <!-- 在下划线后插入软连字符,允许在此处换行 --> <xsl:value-of select="replace('c_sunil_folder1_folder2_folder3_folder4_folder5_folder6_suniltext.pdf', '_', '_­')"/> </fo:block> </fo:table-cell>
3. 处理器特定强制换行方案(可选)
如果使用Antenna House等支持扩展属性的FO处理器,可直接设置强制换行属性,无需修改文本内容:
<fo:table-cell xsl:use-attribute-sets="table.cell" border-top="none"> <fo:block wrap-option="wrap" axf:word-break="break-all"> <xsl:value-of select="'c_sunil_folder1_folder2_folder3_folder4_folder5_folder6_suniltext.pdf'"/> </fo:block> </fo:table-cell>
axf:word-break="break-all"会强制文本在任意字符处换行,适配无自然分隔符的超长文本场景。
关键属性说明
wrap-option="wrap":允许文本在单元格宽度范围内自动换行hyphenate="true":启用连字符换行逻辑,配合软连字符实现指定位置换行­:软连字符,仅在需要换行时生效,不会影响文本的正常显示
内容的提问来源于stack exchange,提问作者sunil
相关产品推荐
相关产品推荐

