------------------------------------------------------------------------------- $Id$ -----------------------------------------------------------------------------*/ require_once 'MLIB/PDF/Contenido.php'; /** * Libreria de texto en PDF. */ class MLIB_PDF_Texto extends MLIB_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 MLIB_PDF_Marco. * * @return void * @access public */ function MLIB_PDF_Texto($orientacion = null, $encabezado = true) { $this->_orientacion = $orientacion; $this->_encabezado = $encabezado; } /** * Funcion que se encarga de crear las nuevas paginas. * * @param &Object $MARCO MLIB_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 MLIB_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; } /** * 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. * * @access public * @return int */ function cantParrafos() { return count($this->_parrafos); } /** * Devuelve el array de parrafos * * @access public * @return array */ function getParrafos() { return $this->_parrafos; } } ?>