2009-11-11 277 views
11

Quiero mostrar un texto con una fuente más grande en la columna de la izquierda de <fo:table>. Sin embargo, las columnas a la derecha deben consistir en un par de filas con texto más pequeño.¿Hay alguna manera de usar el equivalente de 'rowspan' en XSL-FO?

Esto es como el código XSL parece antes de la adición de cualquier columna de la izquierda con el texto más 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> 

Quiero añadir una columna a la izquierda, pero no puedo encontrar la sintaxis para ello. En HTML lo anterior se escribiría algo como esto:

<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> 

y llevar a cabo lo que yo quiero que sólo sería necesario modificar de esta manera:

<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> 

Pero, ¿cómo habría que hacer mejor por XSL-FO?

+0

¿No debería el título mencionar XSL: FO en lugar de XSLT? – ndim

+0

Como habrás notado, soy un principiante de XSL y puedo ver que tienes razón. La pregunta es sobre XSL: FO y no XSLT. ¡Gracias! – Niklas

Respuesta

30

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

no te encanta cómo prolijo XSL es?

0

Utilice number-rows-spanned o number-column-spanned. Pero, ¿por qué no usar un diseñador visual? Estoy usando el Ecrion XF Designer y está haciendo un trabajo bastante bueno.

+1

* number-columns-spanned –

+0

¿Alguna alternativa gratuita a Ecrion? –

3

La respuesta seleccionada anterior es correcta, agrega la cláusula "number-rows-spanned =" a la definición de la celda de la tabla.

Sin embargo, a diferencia de HTML, no se deja en celdas de marcador de posición en las filas distribuidas a continuación. Si lo hace, FO se quejará de que haya demasiadas celdas definidas en la fila.

Cuestiones relacionadas