]> git.llucax.com Git - mecon/meconlib.git/blobdiff - lib/MECON/PDF/Tabla.php
PDF en camino
[mecon/meconlib.git] / lib / MECON / PDF / Tabla.php
index cd1d7d47e92250891b855033e2824ecb55c10884..9a8215859420cd46d07372d2db92f6a11cb0e9bd 100644 (file)
@@ -39,10 +39,115 @@ class MECON_PDF_Tabla extends MECON_PDF_Marco {
      * @access public
      */
     function display() {
-        $this->_pdf->newPage($this->_tamanio);
-        $this->buildPage();
+        if ($this->getRowCount()) {
+            $this->_agregarContenido();
+        }
+        else {
+            $this->_pdf->newPage($this->_tamanio);
+            $this->_pdf->addText($this->_config['Xi'], 
+                    $this->_config['contenido']['Y'], 
+                    'No hay contenido para mostrar.', 
+                    $this->_config['contenido']);
+            $this->buildPage();
+        }
         $this->_pdf->display();
     }
-    
+
+    /**
+     * Funcion que devuelve el estilo de la celda segun la configuracion.  
+     *
+     * @param int $row Indicador de la fila
+     * @param int $col Indicador de la columna
+     *
+     * @return array
+     * @access protected
+     */
+    function _obtenerEstiloCelda($row, $col) {
+        $clase = $this->getCellAttributes($row, $col);
+        switch ($clase['class']) {
+            case 'mecon_html_tabla_comun_cabecera':
+                $estilo = $this->_config['celda_cabecera'];
+                break;
+            case 'mecon_html_tabla_comun_titulo':
+                $estilo = $this->_config['celda_titulo'];
+                break;
+            default : 
+                $estilo = $this->_config['celda_comun'];
+                break;
+        }
+        return $estilo;
+    }
+
+    /**
+     * Funcion que agrega las filas y columnas a la pagina.                  
+     *
+     * @return void
+     * @access protected
+     */
+    function _agregarContenido() {
+        //Calculo el ancho de la columnas basandome en el ancho que tienen las
+        //mismas en la primer fila {{{
+        $ancho_pagina = abs($this->_config['Xf'] - 
+                $this->_config['Xi']) ;
+        for ($i=0; $i<$this->getColCount(); $i++ ) {
+            $tmp = $this->getCellAttributes(0,$i);
+            if (is_null(@$tmp['width'])) {
+                die ('Todas las columnas deben tener asignado un ancho.');                
+            }
+            $attr[$i] = intval($tmp['width']);
+        }
+        $tmp = array_sum($attr);
+        $attr2[0] = $this->_config['Xi'];
+        for ($i=1; $i<count($attr); $i++) {
+            $attr2[$i] = intval(($ancho_pagina * $attr[$i-1] / $tmp) +
+                    $attr2[$i-1]);
+        }
+        $attr2[$i] = $this->_config['Xf'];
+        ///}}}
+        
+        $this->_pdf->newPage($this->_tamanio);       
+        
+        $alto = $this->_getAvailableSpace($this->_pdf->numPage());
+        
+        for ($i = 0; $i < $this->getRowCount(); $i++) {
+            $max = 0;
+            for ($j = 0; $j < $this->getColCount(); $j++) {
+                $estilo = $this->_obtenerEstiloCelda($i, $j);
+                $txt = $this->_pdf->wordWrap($this->getCellContents($i,$j),
+                        $attr2[$j+1] - $attr2[$j], $estilo);
+                $max = max($estilo['alto_linea'] * count($txt), $max);
+                
+            }
+            $alto -= $max;
+            
+            if ($alto < $this->_config['Yi']) {
+                $this->_pdf->newPage($this->_tamanio);
+                $alto = $this->_getAvailableSpace($this->_pdf->numPage());
+            }
+            for ($j = 0; $j < $this->getColCount(); $j++) {
+                $estilo = $this->_obtenerEstiloCelda($i, $j);
+                
+                $this->_pdf->addRectangle($alto, $attr2[$j],
+                        $alto+$max,
+                        $attr2[$j+1], @$estilo['fill']);
+                
+                $txt = $this->_pdf->wordWrap($this->getCellContents($i,$j),
+                        $attr2[$j+1] - $attr2[$j], $estilo);
+                $alto1 = $alto + $max;
+                foreach ($txt as $t) {
+                    $alto1 -= $estilo['alto_linea'];
+                    $this->_pdf->addText($attr2[$j] + 1, $alto1 + 1,
+                            $t, $estilo);
+                }
+            }
+        }
+        $t = true;
+        foreach ($this->_pdf->getPages() as $page) {
+            $this->_pdf->_pagina_actual = $page;
+            $this->buildPage($t, $t);
+            $t = false;
+        }
+    }
+
 }
 ?>
\ No newline at end of file