我希望段落的第一行有一个首字母,所有其他段落的文本缩进。我正在使用以下代码:
<xsl:template match="paragraph">
<xsl:choose>
<!-- no text-indent, first letter bigger -->
<xsl:when test="fn:position() = 1">
<fo:block font-size="10pt" font-height="12pt">
<fo:inline font-size="18pt"><xsl:value-of
select="substring(.,1,1)"/></fo:inline>
<xsl:value-of select="substring(.,2)"/>
</fo:block>
</xsl:when>
<xsl:otherwise>
<!-- text-indent -->
<fo:block line-height="12pt"
text-indent="10pt">
<xsl:value-of select="."/></fo:block>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
这样可行,但第一行的行高增大,行之间有很大的空间。
line-height-attributes或<fo:initial-property-set>
不起作用。
非常感谢。
编辑:我正在使用fop
修改:FOP不支持<fo:float>
或<fo:initial-property-set>
。我使用<fo:list>
尝试了另一个代码:
<xsl:when test="fn:position() = 1">
<fo:block font-family="Times" font-size="10pt" line-height="12pt">
<fo:list-block>
<fo:list-item>
<fo:list-item-label>
<fo:block font-size="18pt"><xsl:value-of select="substring(.,1,1)"/></fo:block>
</fo:list-item-label>
<fo:list-item-body>
<fo:block><xsl:value-of select="substring(.,2)"/></fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
</fo:block>
</xsl:when>
结果如下:
所以我在 
的选择模式的值中使用了数字空间<fo:list-item-body>
:
<xsl:when test="fn:position() = 1">
<fo:block font-family="Times" font-size="10pt" line-height="12pt">
<fo:list-block>
<fo:list-item>
<fo:list-item-label>
<fo:block font-size="18pt"><xsl:value-of select="substring(.,1,1)"/></fo:block>
</fo:list-item-label>
<fo:list-item-body>
<fo:block><xsl:value-of select="(' ', ' ', substring(.,2))"/></fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
</fo:block>
</xsl:when>
这不仅仅是邋,,它也不是很好用:
有没有人有解决方案?
答案 0 :(得分:3)
这个xsl片段,从问题中的第一个最小修订版,使用Apache FOP生成所需的结果:
<xsl:template match="paragraph">
<xsl:choose>
<!-- no text-indent, first letter bigger -->
<xsl:when test="not(preceding-sibling::paragraph)">
<fo:block line-height="12pt"
line-stacking-strategy="font-height">
<fo:inline font-size="18pt"><xsl:value-of
select="substring(.,1,1)"/></fo:inline>
<xsl:value-of select="substring(.,2)"/>
</fo:block>
</xsl:when>
<xsl:otherwise>
<!-- text-indent -->
<fo:block line-height="12pt"
text-indent="10pt">
<xsl:value-of select="."/></fo:block>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
重点: