使用“fo inline”并在行内保持一致使文本开箱即用,永远不会转到下一行

时间:2017-02-15 10:20:37

标签: xslt xsl-fo apache-fop

<xsl:for-each select="../div">
  <xsl:choose>
    <xsl:when test="@class='champLibre'">
      <fo:inline keep-with-next.within-line="always" >
        <xsl:value-of select="text()"/>
      </fo:inline> 
      <fo:inline  border-bottom-style="dotted"  border-bottom-color="#000"
            border-bottom-width="1pt"><xsl:value-of select="div/text()"/>
          <xsl:text>&#160;&#160;&#160;&#160;&#160;&#160;</xsl:text>
      </fo:inline> 
    </xsl:when>

我想将块(div的内容+某些文本)对齐在同一行,这样当它到达行尾时,包含div + some文本的块必须转到下一行,如果有的话div + some文本没有足够的空间。

但是,我得到这样的东西:

First line:  .... some 
Second line: words:.....

我想要的是:

First line:  .... 
Second line: some words:...

without using keep

after using keep together within line

1 个答案:

答案 0 :(得分:1)

fo:inline(当前)必须与行中接下来的内容保持一致,接下来的内容是fo:inline,以不间断的空格结束。你还没有离开任何地方去破线。

尝试将每一对放入单独的fo:block

<xsl:for-each select="../div">
  <xsl:choose>
    <xsl:when test="@class='champLibre'">
      <fo:block>
        <xsl:value-of select="text()"/>
        <fo:inline  border-bottom-style="dotted"  border-bottom-color="#000"
            border-bottom-width="1pt">
          <xsl:value-of select="div/text()"/>
          <xsl:text>&#160;&#160;&#160;&#160;&#160;&#160;</xsl:text>
      </fo:block> 
    </xsl:when>