From: Martín Marrese Date: Mon, 26 Apr 2004 19:55:05 +0000 (+0000) Subject: MECON_PDF_Imagen finalizado. Falta probarlo y hacer un codigo mas leible. X-Git-Tag: svn_import~57 X-Git-Url: https://git.llucax.com/mecon/meconlib.git/commitdiff_plain/4d7f49287131b3b01e7f79b16b4b8bae49ef7c4c MECON_PDF_Imagen finalizado. Falta probarlo y hacer un codigo mas leible. --- diff --git a/lib/MECON/PDF/Imagen.php b/lib/MECON/PDF/Imagen.php index ce52b67..54f2e4d 100644 --- a/lib/MECON/PDF/Imagen.php +++ b/lib/MECON/PDF/Imagen.php @@ -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 diff --git a/lib/MECON/PDF/Texto.php b/lib/MECON/PDF/Texto.php index 2363af1..82100ea 100644 --- a/lib/MECON/PDF/Texto.php +++ b/lib/MECON/PDF/Texto.php @@ -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