]> git.llucax.com Git - mecon/meconlib.git/commitdiff
MECON_PDF_Tabla ahora soporta colspan. Se las ingenia para solucionar los errores...
authorMartín Marrese <marrese@gmail.com>
Thu, 13 Nov 2003 21:33:43 +0000 (21:33 +0000)
committerMartín Marrese <marrese@gmail.com>
Thu, 13 Nov 2003 21:33:43 +0000 (21:33 +0000)
lib/MECON/PDF/Tabla.php
test/PDF/test.php

index 414b0192695f9a93aef1f3f3a2b07ddc6349a81e..94a278dc83aa6e60140c9292374d264f11d60840 100644 (file)
@@ -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;
index 413f0978f5d3b3ebdbd43f233a5554f880e941d2..93e98edf2f1e72be1c4e7dbfae2b97c617c09f49 100755 (executable)
@@ -1,6 +1,6 @@
 <?php
 
-ini_set('max_execution_time', 200);
+//ini_set('max_execution_time', 200);
 
 
 require_once 'MECON/general.php';
@@ -18,7 +18,7 @@ $TABLA->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 '<PRE>MARTIN FIN </PRE>';
 
-$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();
 
 ?>