2009-11-11 7 views
11

Desidero visualizzare un testo con un carattere più grande nella colonna all'estrema sinistra di uno <fo:table>. Le colonne a destra dovrebbero tuttavia consistere in un paio di righe con testo più piccolo.C'è un modo per usare l'equivalente di 'rowspan' in XSL-FO?

in questo modo il codice XSL assomiglia prima di aggiungere una colonna più a sinistra con il testo più grande:

<xsl:template name="printAddress"> 
    <xsl:param name="subDocument" /> 
    <fo:table table-layout="fixed" background-color="#e0e0e0" keep-with-next.within-page="always"> 
    <fo:table-column column-width="7.0cm" /> 
    <fo:table-column column-width="7.0cm" /> 
    <fo:table-column column-width="2.0cm" /> 
    <fo:table-body> 
     <!-- Begin Row 1 --> 
     <fo:table-row keep-with-previous="always"> 
     <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm"> 
      <fo:block>Value 1</fo:block> 
     </fo:table-cell> 
     <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm"> 
      <fo:block>Value 2</fo:block> 
     </fo:table-cell> 
     <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm"> 
      <fo:block /> 
     </fo:table-cell> 
     </fo:table-row> 
     <!-- Begin Row 2 --> 
     <fo:table-row keep-with-previous="always"> 
     <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm"> 
      <fo:block> 
      <xsl:value-of select="$subDocument/someAttribute" /> 
      </fo:block> 
     </fo:table-cell> 
     <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm"> 
      <fo:block> 
      <xsl:value-of select="$subDocument/someOtherAttribute" /> 
      </fo:block> 
     </fo:table-cell> 
     <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm"> 
      <fo:block /> 
     </fo:table-cell> 
     </fo:table-row> 
     <!-- Begin Row 3 --> 
     <fo:table-row keep-with-previous="always"> 
     <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm"> 
      <fo:block>value 3</fo:block> 
     </fo:table-cell> 
     <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm"> 
      <fo:block>Value 4</fo:block> 
     </fo:table-cell> 
     <fo:table-cell margin-left="0.2cm" padding-before="0.1cm" padding-after="0.1cm"> 
      <fo:block>Value 5</fo:block> 
     </fo:table-cell> 
     </fo:table-row> 
    </fo:table-body> 
    </fo:table> 
</xsl:template> 

voglio aggiungere una colonna a sinistra, ma non riesco a trovare la sintassi per esso. In HTML di cui sopra sarebbe da scrivere qualcosa di simile:

<tr> 
    <td>Value 1</td> 
    <td>Value 2</td> 
    <td></td> 
</tr> 
<tr> 
    <td>{someAttribute}</td> 
    <td>{someOtherAttribute}</td> 
    <td></td> 
</tr> 
<tr> 
    <td>Value 3</td> 
    <td>Value 4</td> 
    <td>Value 5</td> 
</tr> 

E per realizzare ciò che voglio che avremmo solo bisogno di modificarlo in questo modo:

<tr> 
    <td rowspan="3" style="font-weight:bold;font-size:14pt">New Text</td> 
    <td>Value 1</td> 
    <td>Value 2</td> 
    <td></td> 
</tr> 
<tr> 
    <td>{someAttribute}</td> 
    <td>{someOtherAttribute}</td> 
    <td></td> 
</tr> 
<tr> 
    <td>Value 3</td> 
    <td>Value 4</td> 
    <td>Value 5</td> 
</tr> 

Ma come ciò sarebbe meglio farlo con la XSL-FO?

+0

Non dovrebbe il titolo menzionare XSL: FO invece di XSLT? – ndim

+0

Come avrai capito, sono un principiante di XSL e vedo che hai ragione. La domanda riguarda XSL: FO e non XSLT. Grazie! – Niklas

risposta

30

<fo:table-cell number-rows-spanned="3">

non ti piace come prolisso XSL è?

0

Usa righe numerate o con spanning numerico. Ma perché non usare un visual designer? Sto usando il Ecrion XF Designer e sta facendo un buon lavoro.

+1

* number-columns-spanning –

+0

Eventuali alternative gratuite a Ecrion? –

3

La risposta selezionata sopra è corretta, si aggiunge la clausola "number-rows-spanned =" alla definizione della cella della tabella.

Tuttavia, a differenza di HTML, non si lasciano nelle celle segnaposto nelle righe con spanning sottostanti. Se lo fai, FO si lamenterà perché ci sono troppe celle definite nella riga.