X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/67d328b236b5531e94572af215772303e022bcfd..1b946b6e47650fa5465986e2164fbaecdb46e393:/lib/MECON/PDF/Texto.php?ds=sidebyside diff --git a/lib/MECON/PDF/Texto.php b/lib/MECON/PDF/Texto.php index 616229f..82100ea 100644 --- a/lib/MECON/PDF/Texto.php +++ b/lib/MECON/PDF/Texto.php @@ -31,5 +31,300 @@ 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; + } + + /** + * 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; + } } ?> \ No newline at end of file