From e8763947c5e4e45c3804097424f8c670b4160001 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mart=C3=ADn=20Marrese?= Date: Thu, 13 Nov 2003 21:33:43 +0000 Subject: [PATCH] MECON_PDF_Tabla ahora soporta colspan. Se las ingenia para solucionar los errores de colspan (aunque muy lejos no llega porque los problemas directamente los tiene HTML_Table --- lib/MECON/PDF/Tabla.php | 102 +++++++++++++++++++++++++++++++++------- test/PDF/test.php | 28 ++++++----- 2 files changed, 102 insertions(+), 28 deletions(-) diff --git a/lib/MECON/PDF/Tabla.php b/lib/MECON/PDF/Tabla.php index 414b019..94a278d 100644 --- a/lib/MECON/PDF/Tabla.php +++ b/lib/MECON/PDF/Tabla.php @@ -105,13 +105,21 @@ class MECON_PDF_Tabla extends MECON_PDF_Contenido { function _obtenerAlineacionTexto($row, $col, $texto, $attr, $estilo) { $at = $this->_tabla->getCellAttributes($row, $col); + + if (@$at['colspan']) { + $offset = $at['colspan']; + } + else { + $offset = 1; + } + if (@$at['align'] == 'center') { $tam = $this->_marco->strlen($texto, $estilo); - $init = $attr[$col] + ($attr[$col+1] - $attr[$col] - $tam) / 2; + $init = $attr[$col] + ($attr[$col+$offset] - $attr[$col] - $tam) / 2; } elseif (@$at['align'] == 'right') { $tam = $this->_marco->strlen($texto, $estilo); - $init = $attr[$col+1] - $tam + 1; + $init = $attr[$col+$offset] - $tam + 1; } else { $init = $attr[$col]; @@ -151,6 +159,9 @@ class MECON_PDF_Tabla extends MECON_PDF_Contenido { else { $estilo = $this->_config['celda_comun']; } + if (@$clase['colspan']) { + $estilo['colspan'] = $clase['colspan']; + } return $estilo; } @@ -163,12 +174,16 @@ class MECON_PDF_Tabla extends MECON_PDF_Contenido { function _obtenerAnchoColumnas() { $ancho_pagina = $this->_marco->getWidth($this->_marco->refPage(), $this->_marco->getOrientation()); - for ($i=0; $i<$this->_tabla->getColCount(); $i++ ) { - $tmp = $this->_tabla->getCellAttributes(0,$i); - if (is_null(@$tmp['width'])) { - die ('Todas las columnas deben tener asignado un ancho.'); + for ($row = 0; $row<$this->_tabla->getRowCount(); $row++) { + for ($i=0; $i<$this->_tabla->getColCount(); $i++ ) { + $tmp = $this->_tabla->getCellAttributes($row,$i); + if (is_null(@$tmp['width'])) { + $attr[$i] = 0; + } + else { + $attr[$i] = intval($tmp['width']); + } } - $attr[$i] = intval($tmp['width']); } $tmp = array_sum($attr); $attr2[0] = 0; @@ -208,12 +223,29 @@ class MECON_PDF_Tabla extends MECON_PDF_Contenido { } $attr2 = $this->_obtenerAnchoColumnas(); + for ($i = 0; $i < $this->_tabla->getRowCount(); $i++) { $max = 0; for ($j = 0; $j < $this->_tabla->getColCount(); $j++) { $estilo = $this->_obtenerEstiloCelda($i, $j); - $txt = $this->_marco->wordWrap($this->_tabla->getCellContents($i,$j), - $attr2[$j+1] - $attr2[$j], $estilo); + + //Actuo por el colspan + if (@$estilo['colspan']) { + if ($estilo['colspan'] >= $this->_tabla->getColCount()) { + $estilo['colspan'] = + $this->_tabla->getColCount() - $j - 1; + } + $ancho_columna = $attr2[$j+$estilo['colspan']] - + $attr2[$j]; + } + else { + $ancho_columna = $attr2[$j+1] - $attr2[$j]; + } + + $txt = $this->_marco->wordWrap( + @$this->_tabla->getCellContents($i,$j), $ancho_columna, + $estilo); + $txtt[$j] = $txt; //Esto es para no hacer el wordWrap siempre $max = max($estilo['alto_linea'] * count($txt), $max); @@ -234,9 +266,25 @@ class MECON_PDF_Tabla extends MECON_PDF_Contenido { $alto -= $repetir[$ii]['max']; for ($jj = 0; $jj < $this->_tabla->getColCount(); $jj++) { $estilo = $this->_obtenerEstiloCelda($ii, $jj); - $this->_marco->addRectangle($attr2[$jj], $alto, - $attr2[$jj+1], $alto+$repetir[$ii]['max'], - @$estilo['fill'], null, $orientacion); + + //Actuo por el colspan + if (@$estilo['colspan']) { + if ($estilo['colspan'] >= $this->_tabla->getColCount()) { + $estilo['colspan'] = + $this->_tabla->getColCount() - $j - 1; + } + $der = $attr2[$jj+$estilo['colspan']]; + $izq = $attr2[$jj]; + } + else { + $der = $attr2[$jj+1]; + $izq = $attr2[$jj]; + } + + + $this->_marco->addRectangle($izq, $alto, $der, + $alto+$repetir[$ii]['max'], @$estilo['fill'], + null, $orientacion); $alto1 = $alto + $repetir[$ii]['max']; foreach ($repetir[$ii][$jj] as $t) { @@ -249,6 +297,11 @@ class MECON_PDF_Tabla extends MECON_PDF_Contenido { $this->_marco->addText($init, $alto1 + 2, $t, $estilo, null, $orientacion); } + + if (@$estilo['colspan']) { + $jj++; + } + } } @@ -256,12 +309,25 @@ class MECON_PDF_Tabla extends MECON_PDF_Contenido { $alto -= $max; for ($j = 0; $j < $this->_tabla->getColCount(); $j++) { - + $estilo = $this->_obtenerEstiloCelda($i, $j); + + //Actuo por el colspan + if (@$estilo['colspan']) { + if ($estilo['colspan'] >= $this->_tabla->getColCount()) { + $estilo['colspan'] = $this->_tabla->getColCount() - 1; + } + $der = $attr2[$j+$estilo['colspan']]; + $izq = $attr2[$j]; + } + else { + $der = $attr2[$j+1]; + $izq = $attr2[$j]; + } + - $this->_marco->addRectangle($attr2[$j], $alto, - $attr2[$j+1], $alto+$max, @$estilo['fill'], null, - $orientacion); + $this->_marco->addRectangle($izq, $alto, $der, $alto+$max, + @$estilo['fill'], null, $orientacion); $alto1 = $alto + $max; if (@$txtt[$j]) { @@ -276,6 +342,10 @@ class MECON_PDF_Tabla extends MECON_PDF_Contenido { $t, $estilo, null, $orientacion); } } + if (@$estilo['colspan']) { + $j++; + } + } } $this->_marco->espacioDisponible = $alto; diff --git a/test/PDF/test.php b/test/PDF/test.php index 413f097..93e98ed 100755 --- a/test/PDF/test.php +++ b/test/PDF/test.php @@ -1,6 +1,6 @@ addRow(array ('1erCabecera', '2daCabecera para que la corete', '3erCabecera'), 'cabecera'); $TABLA->addRow(array ('1erColumna', '2daColumna para que la corete', '3erColumna'), 'clara'); -for ($i=0; $i<30; $i++) { +for ($i=0; $i<10; $i++) { if ($i == 50) { $TABLA->addRow(array ('1erColumna para gonzalo que lo mira por tv desde su casa en ayacucho 1593. Aunque ahora que lo pienso me estoy equivocando', '2daColumna 1erColumna para gonzalo que lo mira por tv desde su casa en ayacucho 1593. Aunque ahora que lo pienso me estoy equivocando FILA 50', '3erColumna1erColumna para gonzalo que lo mira por tv desde su casa en ayacucho 1593. Aunque ahora que lo pienso me estoy equivocando'), 'comun'); } @@ -30,6 +30,8 @@ for ($i=0; $i<30; $i++) { $TABLA->addRow(array ('Fila: '.$i.'Col: 1 ', 'Fila: '.$i.'Col: 2', 'Fila: '.$i.'Col: 3'), 'comun'); } } +$TABLA->updateCellAttributes(0,0, 'colspan="2"'); +$TABLA->updateCellAttributes(5,1, 'colspan="2"'); $TABLA->updateColAttributes(0, 'width="50%"'); $TABLA->updateColAttributes(1, 'width="25%"'); $TABLA->updateColAttributes(2, 'width="35%"'); @@ -63,20 +65,22 @@ $PDF_TEXTO2->setEstilo(0, array ('font' => 'Helvetica-Bold', 'height' => 8, //print '
MARTIN FIN 
'; -$PDF_MARCO =& new MECON_PDF_Marco ('a4', 'landscape'); +$PDF_MARCO =& new MECON_PDF_Marco ('a4', 'portrait'); $PDF_MARCO->seccion = 'Prueba de la libreria de PDF\'s'; $PDF_MARCO->titulo = 'Alberto Giordano'; $PDF_MARCO->subtitulo = 'Filosofo Estilista, guacho pulenta si los hay'; -$PDF_MARCO->addContent(new MECON_PDF_Tabla ($TABLA, 'landscape'), false); -$PDF_MARCO->addContent($PDF_TEXTO, false); -$PDF_MARCO->addContent($PDF_TEXTO2, true); -$PDF_MARCO->addContent(new MECON_PDF_SaltoPagina(), false); -$PDF_MARCO->addContent($PDF_TEXTO2, true); -$PDF_MARCO->addContent($PDF_TEXTO2, true); -$PDF_MARCO->addContent(new MECON_PDF_Tabla ($TABLA), true); -$PDF_MARCO->addContent(new MECON_PDF_Tabla ($TABLA, 'landscape'), false); +$PDF_MARCO->addContent(new MECON_PDF_Tabla ($TABLA, 'portrait'), false); +//$PDF_MARCO->addContent($PDF_TEXTO, false); +//$PDF_MARCO->addContent($PDF_TEXTO2, true); +//$PDF_MARCO->addContent(new MECON_PDF_SaltoPagina(), false); +//$PDF_MARCO->addContent($PDF_TEXTO2, true); +//$PDF_MARCO->addContent($PDF_TEXTO2, true); +//$PDF_MARCO->addContent(new MECON_PDF_Tabla ($TABLA), true); +//$PDF_MARCO->addContent(new MECON_PDF_Tabla ($TABLA, 'landscape'), false); -$PDF_MARCO->display(); + +$TABLA->display(); +//$PDF_MARCO->display(); ?> -- 2.43.0