FOP断字XSL FO技术咨询:subtitle与italic标签的断字属性设置问题
解决方案:用fo:inline-container嵌套fo:block实现行内文本禁用连字符
嘿,这个问题我之前也碰到过!既然hyphenation属性只能用在fo:block和fo:character上,我们可以通过行内容器嵌套块元素的方式来实现需求,既保持文本的行内排版,又能给需要禁用连字符的部分设置属性。
具体实现步骤:
- 首先把
<subtitle>转换成带hyphenate="true"的fo:block,让整个副标题文本启用连字符:
<xsl:template match="subtitle[@type='subtitles']"> <fo:block hyphenate="true"> <xsl:apply-templates/> </fo:block> </xsl:template>
- 然后处理
<italic>元素,用fo:inline-container包裹一个fo:block——fo:inline-container是行内级容器,可以容纳块元素,这样既不会让斜体文本换行,又能给内部的fo:block设置hyphenation="false",同时别忘了加上斜体样式:
<xsl:template match="italic"> <fo:inline-container> <fo:block hyphenation="false" font-style="italic"> <xsl:apply-templates/> </fo:block> </fo:inline-container> </xsl:template>
效果说明:
- 外部的
fo:block(对应<subtitle>)会对所有文本启用自动连字符; - 被
fo:inline-container包裹的内部fo:block(对应<italic>)会禁用连字符,同时因为fo:inline-container的行内特性,斜体文本会和周围内容保持在同一行,不会破坏排版。
这个方案在主流XSL-FO处理器(比如Apache FOP、RenderX XEP)里都能正常工作,完美解决属性限制的问题~
内容的提问来源于stack exchange,提问作者Pocho
相关产品推荐
相关产品推荐

