使用XSL-FO将圣经章节号设置为首字下沉 实现XML转PDF排版
XSL-FO 实现圣经章节号首字下沉效果方案
核心实现逻辑
单独提取章节号作为浮动元素,和首段文本形成自然环绕效果,无需修改全局段落排版规则,适配绝大多数FO处理器的PDF导出逻辑。
核心代码实现
你可以在现有的XSLT模板中新增章节号匹配逻辑,示例代码如下:
<!-- 匹配圣经章节根节点 --> <xsl:template match="chapter"> <!-- 章节号浮动下沉配置 --> <fo:float float="start"> <fo:block font-size="3em" font-weight="bold" line-height="1" margin-right="0.25em" margin-bottom="0.1em" padding-top="0.1em" > <xsl:value-of select="@chapter-num"/> </fo:block> </fo:float> <!-- 章节首段单独配置,取消首行缩进适配下沉效果 --> <fo:block text-indent="0"> <xsl:apply-templates select="verse[1]/node()"/> </fo:block> <!-- 剩余经文正常渲染 --> <xsl:apply-templates select="verse[position() > 1]"/> </xsl:template>
注意:代码中的节点名
chapter、@chapter-num、verse需要和你实际的XML结构字段对应,替换为你自己的节点名即可生效。
参数调整说明
- 下沉行数通过
font-size控制:3em对应下沉3行,2.2em对应下沉2行,数值需要和你正文的行高参数匹配 margin-right控制章节号和右侧经文的间距,避免内容贴边- 如果出现下沉号和下方文本重叠的情况,适当增加
margin-bottom的数值即可解决
兼容性提示
Apache FOP 2.0及以上版本对fo:float的支持已经完全稳定,不会出现排版错位问题。如果使用其他FO处理器,仅需验证浮动属性的支持情况,核心逻辑无需调整。
内容的提问来源于stack exchange,提问作者Andrej90
相关产品推荐
相关产品推荐

