2014-07-21 39 views
3

我有一個數據列表,用虛線的領導將文本對齊到左側和右側。我正在使用以下XSL-FO來實現此目的。XSL-FO領導者包裝

<fo:block text-align-last="justify"> 
    <xsl:value-of select="left-text"/> 
    <fo:leader leader-pattern="dots"/> 
    <xsl:value-of select="right-text"/> 
</fo:block> 
Some text on the left............................some text on the right

這工作完全當文本全部套住一行。我遇到的問題是正確處理右側文本如何換行。我有一個具體的要求,它與右對齊,如下行文本停留格式化:

Some text on the left.................a long piece of text on the right 
                 that has wrapped

我試着與領導和表格,但無濟於事,以實現這一目標。我正在使用Athena House格式器。任何建議是非常受歡迎的。 感謝您的幫助。

+0

您可以設置整個'FO:block'將右對齊? –

+0

不幸的是,它沒有奏效。它對格式沒有任何影響。不管怎麼說,還是要謝謝你。 – Peter

+0

1)你應該顯示你的表格測試和2)在你描述的圖片中,你有一些你沒有指定的格式規則。你實際上畫出了一張圖片,暗示你有一定的寬度,你希望領導永遠不會短於。我的意思是,你展示的文字中更多的文字適合少點的文字。規則是什麼 ... ? –

回答

5

以此爲靈感,並設置自己的規則:

 <fo:block text-align="justify" text-align-last="right"> 
      <fo:inline>Some text on the left</fo:inline> 
      <fo:leader leader-pattern="dots" leader-length.minimum="2in" leader-length.optimum="2in" leader-length.maximum="3in"/> 
      <fo:inline>a long piece of text on the right that has wrapped</fo:inline> 
     </fo:block> 
     <fo:block text-align="justify" text-align-last="right"> 
      <fo:inline>Some text</fo:inline> 
      <fo:leader leader-pattern="dots" leader-length.minimum="2in" leader-length.optimum="2in" leader-length.maximum="3in"/> 
      <fo:inline>a long piece of text on the right that has wrapped and is even longer</fo:inline> 
     </fo:block> 

唯一的東西,你就不能停止是右手行這麼久,涉及的點下方,但你沒有指定作爲一項要求。如果是這樣,恐怕沒有解決方法。另外,如果一條線太短,它將被對齊。您必須使用最小值/最大值來強制換行。

如果您知道字體大小,您可以計算左/右元素中的字符,然後根據總字符調用您的模板或此示例。

Result of this FO

而對於數,你可以這樣做模板,其中「50」的字符,你可以用領袖長度調節,以獲得正確的結果。

<xsl:template name="processitem"> 
    <xsl:choose> 
     <xsl:when test="string-length(left) + string-length(right) > 50"> 
      <fo:block text-align="justify" text-align-last="right"> 
       <fo:inline><xsl:value-of select="left"/></fo:inline> 
       <fo:leader leader-pattern="dots" leader-length.minimum="2in" leader-length.optimum="2in" leader-length.maximum="4in"/> 
       <fo:inline><xsl:value-of select="right"/></fo:inline> 
      </fo:block> 
     </xsl:when> 
     <xsl:otherwise> 
      <fo:block text-align-last="justify"> 
       <fo:inline><xsl:value-of select="left"/></fo:inline> 
       <fo:leader leader-pattern="dots"/> 
       <fo:inline><xsl:value-of select="right"/></fo:inline> 
      </fo:block> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

隨着一些示例數據,我得到這個渲染:

Using Template Above with Sample Data

+0

謝謝,這是一個非常大的幫助。正如你所建議的,我只需要調整最大字符長度值,然後使用我的樣式表工作。乾杯! – Peter