]> git.llucax.com Git - mecon/meconlib.git/blobdiff - lib/MECON/PDF/Texto.php
Agrego nueva funcionalidad a MECON_PDF_Texto.
[mecon/meconlib.git] / lib / MECON / PDF / Texto.php
index 616229fe78dc056a83846e9b34ff7ae14688940d..2363af1d95e29e028ae99fe15f46d3d5ce1be6cf 100644 (file)
@@ -31,5 +31,266 @@ require_once 'MECON/PDF/Contenido.php';
  */
 class MECON_PDF_Texto extends MECON_PDF_Contenido {
     
+    /**
+     * Parrafos que componen el texto.
+     * @var array $parafos
+     * @access protected
+     */
+    var $_parrafos = array();
+
+    /**
+     * Estilos PDF para cada parrafo. Entre los estilos pdf se debe encontrar
+     * aquel que defina la alineacion 'align' => center, left o right
+     * @var array $estilos
+     * @access protected
+     */
+    var $_estilos = array();
+
+    /**
+     * Estilo estandar.
+     * @var array $estilo_defecto
+     * @access protected
+     */
+    var $_estilo_defecto = array (
+            'font'   => 'Helvetica-Bold',
+            'height' => 8,
+            'align'  => 'left'
+            );
+
+    /**
+     * Orientacion de las nuevas paginas
+     * @var string $orientacion  
+     * @access protected
+     */
+    var $_orientacion;
+
+    /**
+     * Indica si el encabezado debe ir en la nuevas paginas.
+     * @var bool $encabezado
+     * @access protected;
+     */
+    var $_encabezado;
+    
+    /**
+     * Class Constructor.
+     *
+     * @param string $orientacion Orientacion que tendran las nuevas paginas que
+     * esta clase genere.
+     * @param bool $encabezado Indica si las paginas nuevas que genere esta
+     * clase tendran el encabezado de MECON_PDF_Marco.
+     *
+     * @return void
+     * @access public
+     */
+    function MECON_PDF_Texto($orientacion = null, $encabezado = true) {
+        $this->_orientacion = $orientacion;
+        $this->_encabezado = $encabezado;
+    }
+
+    /**
+     * 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 del texto al PDF.
+     *
+     * @param &Object $MARCO MECON_PDF_Marco
+     *
+     * @return void
+     * @access public
+     */
+    function toPDF(&$MARCO) {
+        $alto = $MARCO->espacioDisponible;
+        if ($alto <= 0 ) {
+            $this->_newPage($MARCO);
+            $alto = $MARCO->espacioDisponible;
+        }
+        
+        $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation());
+        $orientacion = $MARCO->getOrientation();
+
+        for ($i=0; $i < count($this->_parrafos); $i++) {
+            if (@!$this->_estilos[$i]) {
+                $this->_estilos[$i] = $this->_estilo_defecto;
+            }
+        
+            $txt = @$MARCO->wordWrap($this->_parrafos[$i], $ancho_pagina - 2,
+                    $this->_estilos[$i]);
+            
+            foreach ($txt as $t) {
+                $alto -= $this->_estilos[$i]['height'];
+                if ($alto <= 0) 
+                {
+                    $this->_newPage($MARCO);
+                    $alto = $MARCO->espacioDisponible;
+                }
+
+                if (@$this->_estilos[$i]['align'] == 'center') {
+                    $tam = @$MARCO->strlen($t, $this->_estilos[$i]);
+                    $init = ($ancho_pagina - $tam) / 2;
+                }
+                elseif (@$this->_estilos[$i]['align'] == 'right') {
+                    $tam = @$MARCO->strlen($t, $this->_estilos[$i]);
+                    $init = $ancho_pagina - $tam + 1;
+                }
+                else {
+                    $init = 0;
+                }
+           
+
+                $MARCO->addText($init, $alto + 2,
+                        $t, $this->_estilos[$i], null, $orientacion);
+           
+
+            }
+        }
+        $MARCO->espacioDisponible = $alto;
+    }
+    
+    /**
+     * Funcion que permite agregar parrafos al texto. Puede recibir un string
+     * con parrafos separados por \\n o un array con las mismas caracteristicas.
+     * Los estilos deben ser pasados dentro de un array, en donde a cada clave
+     * del array de contenido que se forme con el contenido le correspondera una
+     * clave del array de estilos. Existe la posibilidad de pasar solo un estilo
+     * y que este sea utilizado por todos los parrafos que se genere.
+     * 
+     * @param mixed $cont   Parrafos a agregar
+     * @param array $estilo Estilos de los parrafos.
+     *
+     * @access public
+     * @return void
+     */
+    function addContent($cont) {
+        if (is_string($cont)) {
+            $cont = split ("\n", $cont);
+        }
+        foreach ($cont as $c) {
+            //Me aseguro que lo que me pasen dentro del array de parrafos
+            //sean parrafos.
+            $c = split ("\n", $c); 
+            foreach ($c as $tmp) {
+                if ($tmp) {
+                    $this->_parrafos[] = $tmp;
+                }
+                else {
+                    $this->_parrafos[] = ' ';
+                }
+            }
+        }
+    }
+
+    /**
+     * Funcion que permite remover parrafos del texto. Recibe el id del parrafo
+     * (posicion dentro del array de parrafos). Elimina tambien el estilo que
+     * este tiene asociado en el array de parrafos.
+     * 
+     * @param int $pos Posicion del parrafo a eliminar.
+     *
+     * @access public
+     * @return void
+     */
+    function removeContent($pos) {
+        array_splice($this->_parrafos, $pos, 1);
+        array_splice($this->_estilos, $pos, 1);
+    }
+    
+    /**
+     * Funcion que permite setear los parrafos al texto. Recibe el texto (array
+     * o string) a agregar y una posicion en donde en donde ponerlo (posicion
+     * del array de parrafos). Si no recibe un identificador del parrafo, borra
+     * el contenido actual y agrega solamente lo que se paso por parametro.
+     * Los estilos deben ser pasados dentro de un array, en donde a cada clave
+     * del array de contenido que se forme con el contenido le correspondera una
+     * clave del array de estilos. Existe la posibilidad de pasar solo un estilo
+     * y que este sea utilizado por todos los parrafos que se genere.
+     * 
+     * @param int $pos      Posicion del/los parrafo/s
+     * @param mixed $cont   Parrafos a agregar
+     *
+     * @access public
+     * @return void
+     */
+    function setContent($pos, $cont) {
+        if (is_string($cont)) {
+            $cont = split ("\n", $cont);
+        }
+        foreach ($cont as $c) {
+            //Me aseguro que lo que me pasen dentro del array de parrafos
+            //sean parrafos.
+            $c = split ("\n", $c); 
+            foreach ($c as $tmp) {
+                $parrafos[] = $tmp;
+            }
+        }
+        $tmp = array_slice ($this->_parrafos, 0, $pos);
+        $tmp = array_merge ($tmp, $parrafos, array_slice ($this->_parrafos, 
+                    $pos));
+        $this->_parrafos = $tmp;
+    }
+  
+    /**
+     * Funcion que permite modificar los estilos de uno o mas parrafos.
+     *
+     * @param mixed $pos Array o int que identifique la posicion de los parrafos.
+     * @param array $estilo Array de estilos.
+     *
+     * @access public
+     * @return void
+     */
+    function updateEstilo($pos, $estilo) {
+        if (@$this->_estilos[$pos]) {
+            $this->_estilos[$pos]  = array_merge($this->_estilos[$pos], $estilo);
+        }
+        else {
+            $this->setEstilo($pos, array_merge($this->_estilo_defecto, $estilo));
+        }
+    }
+    
+    /**
+     * Funcion que permite eliminar los estilos de uno o mas parrafos.
+     *
+     * @param mixed $pos Array o int que identifique la posicion de los parrafos.
+     *
+     * @access public
+     * @return void
+     */
+    function removeEstilo($pos) {
+        array_splice($this->_estilos, $pos, 1);
+    }
+
+    /**
+     * Funcion que permite setear los estilos de uno o mas parrafos.
+     *
+     * @param mixed $pos Array o int que identifique la posicion de los parrafos.
+     * @param array $estilo Array de estilos.
+     *
+     * @access public
+     * @return void
+     */
+    function setEstilo($pos, $estilo) {
+        $this->_estilos[$pos] = $estilo;
+    }
+
+    /**
+     * Funcion que devuelve el numero de parrafos que hay cargados.
+     *
+     * @access public
+     * @return int
+     */
+    function cantParrafos() {
+        return count($this->_parrafos);
+    }
 }
 ?>
\ No newline at end of file