]> git.llucax.com Git - mecon/meconlib.git/commitdiff
MECON_PDF_Imagen finalizado. Falta probarlo y hacer un codigo mas leible.
authorMartín Marrese <marrese@gmail.com>
Mon, 26 Apr 2004 19:55:05 +0000 (19:55 +0000)
committerMartín Marrese <marrese@gmail.com>
Mon, 26 Apr 2004 19:55:05 +0000 (19:55 +0000)
lib/MECON/PDF/Imagen.php
lib/MECON/PDF/Texto.php

index ce52b670e716a8c210ea00475c61c34d1fd5ccf7..54f2e4dc8499b189222975f40e388bdcc8f5a038 100644 (file)
@@ -66,6 +66,13 @@ class MECON_PDF_Imagen extends MECON_PDF_Contenido {
      */
     var $_param;
 
+    /**
+     * Array de MECON_PDF_Texto para agregar al lado de las imagenes.
+     * @var array $contenido
+     * @access protected
+     */
+    var $_contenido = array();
+    
     /**
      * Class Constructor
      *
@@ -88,6 +95,18 @@ class MECON_PDF_Imagen extends MECON_PDF_Contenido {
         $this->_encabezado = $encabezado;
         $this->_param = $param;
     }
+    
+    /**
+     * Permite agregar texto contenido que sera puesto al lado de las imagenes.
+     *
+     * @param Object $TEXTO MECON_PDF_Texto.
+     *
+     * @return void
+     * @access public
+     */
+    function agregarContenido($TEXTO) {
+        $this->_contenido[] = $TEXTO;
+    }
 
     /**
      * Permite rotar la imagen n grados.
@@ -101,20 +120,6 @@ class MECON_PDF_Imagen extends MECON_PDF_Contenido {
         $this->_param['rotation'] = $grados;
     }
    
-    /**
-     * Funcion que se encarga de crear las nuevas paginas.
-     *
-     * @param &Object $MARCO MECON_PDF_Marco
-     *
-     * @return void
-     * @access protected
-     */
-    function _newPage(&$MARCO) {
-        $tmp = ($this->_orientacion) ? $this->_orientacion :
-            $MARCO->getOrientation();
-        $MARCO->newPage($MARCO->tamanio, $tmp, $this->_encabezado);               
-    }
-   
     /**
      * Funcion que agrega el contenido de la tabla que se este utilizando al
      * PDF.
@@ -173,10 +178,145 @@ class MECON_PDF_Imagen extends MECON_PDF_Contenido {
         //Agrego la imagen
         $MARCO->addImage($tmp_path, $X, $alto, null, 'png', $this->_orientacion,
                 $this->_param);
-        
+        if ($this->_contenido && ($this->_align == 'left' || 
+                    $this->_align == 'right')) {
+            $this->_contenidoToPdf($MARCO, $tam, $alto);
+            $alto = $MARCO->espacioDisponible;
+        }
         $MARCO->espacioDisponible = $alto - 2;
     }
 
+    /**
+     * Agrega al pdf el texto adjunto a la imagen.
+     *
+     * @param &Object $MARCO MECON_PDF_Marco.
+     * @param array $tam Tamaño de la imagen.
+     * @param int $alto Alto disponible en la pagina.
+     *
+     * @return void
+     * @access protected
+     */
+    function _contenidoToPdf(&$MARCO, $tam, $alto) {
+        $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation());
+        $orientacion = $MARCO->getOrientation();
+
+        switch ($this->_align) {
+            case 'left':
+                $coord['Xi'] = $tam['width'] + 2;
+                $coord['Xf'] = $ancho_pagina;
+                $coord['Yi'] = $alto;
+                $coord['Yf'] = $alto + $tam['height'];
+                break;
+            case 'right':
+                $coord['Xi'] = 0;
+                $coord['Xf'] = $ancho_pagina - $tam['width'] - 2;
+                $coord['Yi'] = $alto;
+                $coord['Yf'] = $alto + $tam['height'];
+                break;
+        }
+        
+        foreach ($this->_contenido as $TEXTO) {
+            $this->_textoToPdf($MARCO, $coord, $alto, $TEXTO);
+        }
+    }
+
+    /**
+     * Agrega objeto por objeto el contenido al pdf general.
+     *
+     * @param &Object $MARCO MECON_PDF_Marco.
+     * @param array $coord Coordenadas para el texto.
+     * @param int $alto Alto disponible en la pagina.
+     * @param Object $TEXTO MECON_PDF_Texto.
+     *
+     * @return void
+     * @access protected
+     */
+    function _textoToPdf(&$MARCO, $coord, $alto, $TEXTO) {
+        $cant_parrafos = $TEXTO->cantParrafos();
+        $parrafos = $TEXTO->getParrafos();
+        $estilos = $TEXTO->getEstilo();
+        $estilo_defecto = $TEXTO->getEstiloDefecto();
+        $ancho_texto = $coord['Xf'] - $coord['Xi'] - 2;
+        $alto_texto = $coord['Yf'];
+        $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation());
+        $orientacion = $MARCO->getOrientation();
+        for ($i=0; $i < $cant_parrafos; $i++) {
+            if (@!$estilos[$i]) {
+                $estilos[$i] = $estilo_defecto;
+            }
+            
+            if ($alto_texto <= $coord['Yi'] - $estilos[$i]['height']) {
+                $txt = @$MARCO->wordWrap($parrafos[$i], $ancho_pagina - 2,
+                        $estilos[$i]);
+            }
+            else {
+                $txt = @$MARCO->wordWrap($parrafos[$i], $ancho_texto,
+                        $estilos[$i]);
+            }
+            
+            if (@$txt) {
+                while (count($txt)) {
+                    $t = array_shift($txt);
+                    $alto_texto -= $estilos[$i]['height'];
+                    if ($alto_texto <= $coord['Yi'] - $estilos[$i]['height']) {
+                        //Tengo que escribir como si fuera texto normal
+                        //Junto los parrafos que me quedan y obtengo
+                        if (@!$tmp) {
+                            $tmp = implode(' ', $txt);
+
+                            $txt = @$MARCO->wordWrap($tmp, $ancho_pagina - 2,
+                                    $estilos[$i]);
+                            $t = array_shift($txt);
+
+                            $alto = $alto_texto;
+                        }
+                        else {
+                            $alto -= $estilos[$i]['height'];
+                        }
+
+                        if ($alto <= 0) {
+                            $this->_newPage($MARCO);
+                            $alto = $MARCO->espacioDisponible;
+                        }
+
+                        if (@$estilos[$i]['align'] == 'center') {
+                            $tam = @$MARCO->strlen($t, $estilos[$i]);
+                            $init = ($ancho_pagina - $tam) / 2;
+                        }
+                        elseif (@$estilos[$i]['align'] == 'right') {
+                            $tam = @$MARCO->strlen($t, $estilos[$i]);
+                            $init = $ancho_pagina - $tam + 1;
+                        }
+                        else {
+                            $init = 0;
+                        }
+                        $MARCO->addText($init, $alto + 2,
+                                $t, $estilos[$i], null, $orientacion);
+                    }
+                    else {
+                        if (@$estilos[$i]['align'] == 'center') {
+                            $tam = @$MARCO->strlen($t, $estilos[$i]);
+                            $init = ($ancho_texto - $tam) / 2;
+                        }
+                        elseif (@$estilos[$i]['align'] == 'right') {
+                            $tam = @$MARCO->strlen($t, $estilos[$i]);
+                            $init = $ancho_texto - $tam + 3;
+                        }
+                        else {
+                            $init = 2;
+                        }
+
+                        $init += $coord['Xi'];
+
+                        $MARCO->addText($init, $alto_texto + 2, $t, $estilos[$i], 
+                                null, $this->_orientacion);
+                    }
+                }            
+            }
+        }
+        $MARCO->espacioDisponible = $alto;
+    }
+
     /**
      * Permite obtener el valor X segun la alineacion.
      *
@@ -201,5 +341,19 @@ class MECON_PDF_Imagen extends MECON_PDF_Contenido {
         }
         return $X;
     }
+   
+    /**
+     * Funcion que se encarga de crear las nuevas paginas.
+     *
+     * @param &Object $MARCO MECON_PDF_Marco
+     *
+     * @return void
+     * @access protected
+     */
+    function _newPage(&$MARCO) {
+        $tmp = ($this->_orientacion) ? $this->_orientacion :
+            $MARCO->getOrientation();
+        $MARCO->newPage($MARCO->tamanio, $tmp, $this->_encabezado);               
+    }
 }
 ?>
\ No newline at end of file
index 2363af1d95e29e028ae99fe15f46d3d5ce1be6cf..82100eaa9d36f52bcb23df91ad67c737ea267c46 100644 (file)
@@ -104,7 +104,7 @@ class MECON_PDF_Texto extends MECON_PDF_Contenido {
     /**
      * Funcion que agrega el contenido del texto al PDF.
      *
-     * @param &Object $MARCO MECON_PDF_Marco
+     * @param &Object $MARCO MECON_PDF_Marco.
      *
      * @return void
      * @access public
@@ -146,12 +146,9 @@ class MECON_PDF_Texto extends MECON_PDF_Contenido {
                 else {
                     $init = 0;
                 }
-           
 
                 $MARCO->addText($init, $alto + 2,
                         $t, $this->_estilos[$i], null, $orientacion);
-           
-
             }
         }
         $MARCO->espacioDisponible = $alto;
@@ -283,6 +280,33 @@ class MECON_PDF_Texto extends MECON_PDF_Contenido {
         $this->_estilos[$pos] = $estilo;
     }
 
+    /**
+     * Devuelve el array de estilos o uno en particular.
+     *
+     * @param int $pos Número parrafo.
+     *
+     * @access public
+     * @return mixed
+     */
+    function getEstilo($pos = null) {
+        if ($pos) {
+            return $this->_estilos[$pos];
+        }
+        else {
+            return $this->_estilos;
+        }
+    }
+    
+    /*
+     * Devuelve el estilo por defecto.
+     *
+     * @access public
+     * @return mixed
+     */
+    function getEstiloDefecto() {
+        return $this->_estilo_defecto;
+    }
+
     /**
      * Funcion que devuelve el numero de parrafos que hay cargados.
      *
@@ -292,5 +316,15 @@ class MECON_PDF_Texto extends MECON_PDF_Contenido {
     function cantParrafos() {
         return count($this->_parrafos);
     }
+
+    /**
+     * Devuelve el array de parrafos
+     *
+     * @access public
+     * @return array
+     */
+    function getParrafos() {
+        return $this->_parrafos;
+    }
 }
 ?>
\ No newline at end of file