XSL-FO在新页面的顶部没有文本缩进

时间:2014-01-23 12:40:10

标签: xslt xsl-fo

是否可以阻止文档新页面顶部的文本缩进变量?

代码:

<xsl:template match="paragraph">
  <fo:block text-indent="10pt">
    <xsl:value-of select="."/>
  </fo:block>
</xsl:template>

新页面:

XXXXXXX

而不是:

text-indent xxxxxxx

为了避免在章节的第一段中使用文本缩进,我使用了下面的代码,但这对我在新页面上的文本缩进没有帮助:

<xsl:template match="paragraph">
   <xsl:choose>
       <xsl:when test="fn:position() = 1">
           <fo:block>
             <xsl:value-of select="."/>
           </fo:block>
       </xsl:when>
       <xsl:otherwise>
          <fo:block text-indent="10pt">
              <xsl:value-of select="."/>
          </fo:block>
       </xsl:otherwise>
   </xsl:choose>
</xsl:template>

谢谢!

1 个答案:

答案 0 :(得分:2)

据我所知,在实际的FO处理发生之前,无法确定分页符的存在和位置。 1

原因如下。在XSL-FO中,您不是在建模页面。而是定义区域,其中允许文本“流动”。由FO处理器决定如何将内容分成页面。

这样做的结果是事先无法获得某些类型的信息,例如您要查找的Is there going to be a page-break?信息,或者突出显示number of pages

另一方面,您可以轻松控制何时应始终插入分页符。如果您在fo:block元素上指定page-break-afterpage-break-before,则至少可以确保每章的第一段开始于新页面。

<fo:block page-break-before="always">Chapter title</fo:block>

这样,作为一个小小的安慰,如果它与新章节重合,则会忽略新页面上第一段的缩进。


1 请注意,我们讨论的是FOP在没有用户干预的情况下自动引入的分页符。