]> git.llucax.com Git - mecon/meconlib.git/commitdiff
PDF con funcionalidad suficiente para hacer cosas simples
authorMartín Marrese <marrese@gmail.com>
Tue, 4 Nov 2003 21:08:56 +0000 (21:08 +0000)
committerMartín Marrese <marrese@gmail.com>
Tue, 4 Nov 2003 21:08:56 +0000 (21:08 +0000)
lib/MECON/HTML/Tabla.php
lib/MECON/PDF/Tabla.php
test/PDF/downs/prueba_pdf.pdf
test/PDF/prueba_pdf.php

index 50eb62027d14c5ae19ba423f327c0271f1023385..5042427195801d2334430bef2da740776ab6908b 100644 (file)
@@ -266,7 +266,9 @@ class MECON_HTML_Tabla extends HTML_Table {
                 case 'comun':
                 case 'cabecera':
                 case 'titulo':
-                    $rta = array_merge($rta, $this->_conf['atributos']["celda_$attr"]);
+                    $rta = array_merge($rta,
+                            $this->_conf['atributos']["celda_$attr"]);
+                    $rta[$attr] = $attr;
                     break;
                 case 'align':
                 case 'valign':
@@ -289,6 +291,16 @@ class MECON_HTML_Tabla extends HTML_Table {
                 case 'th':
                     $rta[$attr] = '';
                     break;
+                case 'clara': //Toma los mismos parametros que titulo pero en el pdf no se repite
+                    $rta = array_merge($rta,
+                            $this->_conf['atributos']["celda_titulo"]);
+                    $rta[$attr] = $attr;
+                    break;
+                case 'oscura': //Toma los mismos parametros que cabecera pero en el pdf no se repite
+                    $rta = array_merge($rta,
+                            $this->_conf['atributos']["celda_cabecera"]);
+                    $rta[$attr] = $attr;
+                    break;
                 default:
                     trigger_error("No se permite setear el atributo $attr", E_USER_ERROR);
             }
index 9a8215859420cd46d07372d2db92f6a11cb0e9bd..db39cd7108a8d01c647da59b0dd60ab352b7fbd7 100644 (file)
@@ -41,6 +41,15 @@ class MECON_PDF_Tabla extends MECON_PDF_Marco {
     function display() {
         if ($this->getRowCount()) {
             $this->_agregarContenido();
+            
+            //Agrego los encabezados
+            $t = true;
+            foreach ($this->_pdf->getPages() as $page) {
+                $this->_pdf->_pagina_actual = $page;
+                $this->buildPage($t, $t);
+                $t = false;
+            }
+            //}}}
         }
         else {
             $this->_pdf->newPage($this->_tamanio);
@@ -53,6 +62,36 @@ class MECON_PDF_Tabla extends MECON_PDF_Marco {
         $this->_pdf->display();
     }
 
+    /**
+     * Funcion que devuelve la posicion X en donde se debe escribir un texto
+     * segun su ubicacion en la celda
+     *
+     * @param int $row Indicador de la fila
+     * @param int $col Indicador de la columna
+     * @param string $texto Texto a escribir
+     * @param array $attr Atributos internos de la celda
+     * @param array $estilo Estilo del texto
+     *
+     * @return int
+     * @access protected
+     */
+    function _obtenerAlineacionTexto($row, $col, $texto, $attr, $estilo) {
+        
+        $at = $this->getCellAttributes($row, $col);
+        if (@$at['align'] == 'center') {
+            $tam = $this->_pdf->strlen($texto, $estilo);
+            $init = $attr[$col] + ($attr[$col+1] - $attr[$col] - $tam) / 2;
+        }
+        elseif (@$at['align'] == 'right') {
+            $tam = $this->_pdf->strlen($texto, $estilo);
+            $init = $attr[$col+1] - $tam + 1;
+        }
+        else {
+            $init = $attr[$col];
+        }
+        return $init + 1;
+    }
+
     /**
      * Funcion que devuelve el estilo de la celda segun la configuracion.  
      *
@@ -64,29 +103,25 @@ class MECON_PDF_Tabla extends MECON_PDF_Marco {
      */
     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;
+        if (@$clase['cabecera'] || @$clase['oscura']) {
+            $estilo = $this->_config['celda_cabecera'];
+        }
+        elseif (@$clase['titulo'] || @$clase['clara']) {
+            $estilo = $this->_config['celda_titulo'];
+        }
+        else {
+            $estilo = $this->_config['celda_comun'];
         }
         return $estilo;
     }
 
     /**
-     * Funcion que agrega las filas y columnas a la pagina.                  
+     * Funcion que calcula el ancho de las columnas de la tabla.  
      *
-     * @return void
+     * @return array
      * @access protected
      */
-    function _agregarContenido() {
-        //Calculo el ancho de la columnas basandome en el ancho que tienen las
-        //mismas en la primer fila {{{
+    function _obtenerAnchoColumnas() {
         $ancho_pagina = abs($this->_config['Xf'] - 
                 $this->_config['Xi']) ;
         for ($i=0; $i<$this->getColCount(); $i++ ) {
@@ -103,51 +138,86 @@ class MECON_PDF_Tabla extends MECON_PDF_Marco {
                     $attr2[$i-1]);
         }
         $attr2[$i] = $this->_config['Xf'];
-        ///}}}
-        
-        $this->_pdf->newPage($this->_tamanio);       
-        
+        return $attr2;
+    }
+
+    /**
+     * Funcion que agrega las filas y columnas a la pagina.                  
+     *
+     * @return void
+     * @access protected
+     */
+    function _agregarContenido() {
+        $this->_pdf->newPage($this->_tamanio);               
         $alto = $this->_getAvailableSpace($this->_pdf->numPage());
-        
+        $attr2 = $this->_obtenerAnchoColumnas();
         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);
+                $txtt[$j] = $txt; //Esto es para no hacer el wordWrap siempre
                 $max = max($estilo['alto_linea'] * count($txt), $max);
                 
+                $rep = array ();
+                $rep = $this->getCellAttributes($i, $j);
+                if (@$rep['cabecera'] || @$rep['titulo']) {
+                    $repetir[$i][$j] = $txt;
+                    $repetir[$i]['max'] = $max;
+                }
             }
-            $alto -= $max;
             
             if ($alto < $this->_config['Yi']) {
                 $this->_pdf->newPage($this->_tamanio);
                 $alto = $this->_getAvailableSpace($this->_pdf->numPage());
+                
+                foreach ($repetir as $ii => $value) {
+                    $alto -= $repetir[$ii]['max'];
+                    for ($jj = 0; $jj < $this->getColCount(); $jj++) {
+                        $estilo = $this->_obtenerEstiloCelda($ii, $jj);
+                        $this->_pdf->addRectangle($alto, $attr2[$jj],
+                                $alto+$repetir[$ii]['max'],
+                                $attr2[$jj+1], @$estilo['fill']);
+                        
+                        $alto1 = $alto + $repetir[$ii]['max'];
+                        foreach ($repetir[$ii][$jj] as $t) {
+                            $alto1 -= $estilo['alto_linea'];
+
+                            //Ubico el texto segun su alineacion
+                            $init = $this->_obtenerAlineacionTexto($ii, $jj, $t, $attr2,
+                                    $estilo);
+                            
+                            $this->_pdf->addText($init, $alto1 + 2,
+                                    $t, $estilo);
+                        }
+                    }
+                }
+                
             }
+            
+            $alto -= $max;
             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) {
+                foreach ($txtt[$j] as $t) {
                     $alto1 -= $estilo['alto_linea'];
-                    $this->_pdf->addText($attr2[$j] + 1, $alto1 + 1,
+
+                    //Ubico el texto segun su alineacion
+                    $init = $this->_obtenerAlineacionTexto($i, $j, $t, $attr2,
+                            $estilo);
+                    
+                    $this->_pdf->addText($init, $alto1 + 2,
                             $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
index 7ea75be2130c1f9d93a9a5caf4f211c04ed71f47..56c5d45ffcf32d7d5d75ebee311e1ccc9bd7a808 100644 (file)
Binary files a/test/PDF/downs/prueba_pdf.pdf and b/test/PDF/downs/prueba_pdf.pdf differ
index 02515cda76bd172c10447ded2f134209a8fc0649..1b7645cc4302cd14c920936598f54fcfef3ac952 100755 (executable)
@@ -6,142 +6,35 @@ prepend_include_path('/home/mmarrese/public_html/meconlib/lib/');
 //require_once '../../lib/MECON/PDF/Marco.php';
 require_once '../../lib/MECON/PDF/Tabla.php';
 
-$pdf =& new MECON_PDF_Tabla ("a4", "portrait");
+$pdf =& new MECON_PDF_Tabla ("a4", "landscape");
 
-//$pdf->seccion = 'Dir. General de Despacho y Mesa de Entradas y esto eso todo  oooooooooooooooooooooooooooooo';
 $pdf->seccion = 'Prueba de la libreria de PDF\'s';
 $pdf->titulo = 'Alberto Giordano';
 $pdf->subtitulo = 'Filosofo Estilista, guacho pulenta si los hay';
-//$pdf->paginador = false;
-//$pdf->fecha = '2/10/2003';
-
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'cabecera');
-$pdf->addRow(array ('1erColumna', '2daColumna para que la corete', '3erColumna'), 'titulo');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->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', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
-$pdf->addRow(array ('1erColumna', '2daColumna', '3erColumna'), 'comun');
+$pdf->addRow(array ('1erCabecera', '2daCabecera para que la corete', '3erCabecera'), 'cabecera');
+$pdf->addRow(array ('1erColumna', '2daColumna para que la corete',
+            '3erColumna'), 'clara');
+for ($i=0; $i<220; $i++) {
+
+    if ($i == 50) {
+        $pdf->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');
+    }
+    elseif ($i == 30) {
+        $pdf->addRow(array ('Esto es para probar', 'como repite las celdas',
+                    'MECON_PDF_Tabla'), 'titulo');
+    }
+    else {
+        $pdf->addRow(array ('Fila: '.$i.'Col: 1 ', 'Fila: '.$i.'Col: 2', 'Fila: '.$i.'Col: 3'), 'comun');
+    }
+    
+}
 
 $pdf->updateColAttributes(0,'width="50%"');
 $pdf->updateColAttributes(1,'width="25%"');
 $pdf->updateColAttributes(2,'width="35%"');
+$pdf->updateCellAttributes(2,0, 'align="left"');
+$pdf->updateCellAttributes(2,1, 'align="center"');
+$pdf->updateCellAttributes(2,2, 'align="right"');
 
 $pdf->display();