X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/67d328b236b5531e94572af215772303e022bcfd..7009e11967b2ad1cc2a88042d32800270b9ceecc:/lib/MECON/PDF/Imagen.php diff --git a/lib/MECON/PDF/Imagen.php b/lib/MECON/PDF/Imagen.php index 9292803..ce52b67 100644 --- a/lib/MECON/PDF/Imagen.php +++ b/lib/MECON/PDF/Imagen.php @@ -30,6 +30,176 @@ require_once 'MECON/PDF/Contenido.php'; * Libreria de imagenes para PDF. */ class MECON_PDF_Imagen extends MECON_PDF_Contenido { + + /** + * Imagen de Image_Transform. + * @var string $resource + * @access protected + */ + var $_resource; + /** + * Alineacion de la imagen. + * @var string $align + * @access protected + */ + var $_align; + + /** + * 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; + + /** + * Array de parametros que utiliza la libreria. + * @var array $param + * @access protected + */ + var $_param; + + /** + * Class Constructor + * + * @param string $resource Imagen de Image_Transform. + * @param string $align Alineacion de la imagen (left, center, right). + * @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. + * @param array $param Parametros de la imagen. + * + * @return void + * @access public + */ + function MECON_PDF_Imagen($resource = null, $align = "center", $orientacion = + null, $encabezado = true, $param = array()) { + $this->_resource = $resource; + $this->_align = $align; + $this->_orientacion = $orientacion; + $this->_encabezado = $encabezado; + $this->_param = $param; + } + + /** + * Permite rotar la imagen n grados. + * + * @param int $grados Grados de rotación. + * + * @return mixed + * @access public + */ + function rotar($grados) { + $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. + * + * @param &Object $MARCO MECON_PDF_Marco + * + * @return void + * @access public + */ + function toPDF(&$MARCO) { + //Obtengo el tamaño de la imagen + $tam['width'] = $this->_resource->getImageWidth(); + $tam['height'] = $this->_resource->getImageHeight(); + + //Obtengo el espacio disponible en la pagina + $alto = $MARCO->espacioDisponible; + + //Veo si tengo que crear una nueva pagina. + if ($alto <= 0 ) { + $this->_newPage($MARCO); + $alto = $MARCO->espacioDisponible; + } + + //Obtengo los valores de la pagina + $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation()); + $alto_pagina = $MARCO->getHeight($MARCO->refPage(),$MARCO->getOrientation()); + $orientacion = $MARCO->getOrientation(); + + //Veo si me alcanza el tamaño para agregarlo en lo que me queda de la + //pagina (chequeando que no sea una pagina nueva) + if (($alto - $tam['height'] <= 0) && ($alto != $alto_pagina)) { + $this->_newPage($MARCO); + $alto = $MARCO->espacioDisponible; + } + //Veo si entra en el alto disponible + if ($alto - $tam['height'] <= 0) { + $this->_resource->scaleByY($alto); + } + //Veo si entra en el ancho disponible + if ($ancho_pagina <= $tam['width']) { + $this->_resource->scaleByX($anchoPagina); + } + + //Obtego el nombre temporal + $tmp_path = tempnam('/tmp/', 'MECON_PDF_Images_'); + + //Salvo la imagen temporalmente + $this->_resource->save($tmp_path, 'png'); + + //Obtengo la posicion Y + $alto -= $tam['height']; + + //Obtengo la posicion X + $X = $this->_X($MARCO, $tam['width']); + + //Agrego la imagen + $MARCO->addImage($tmp_path, $X, $alto, null, 'png', $this->_orientacion, + $this->_param); + + $MARCO->espacioDisponible = $alto - 2; + } + + /** + * Permite obtener el valor X segun la alineacion. + * + * @param &Object $MARCO MECON_PDF_Marco. + * @param int width Ancho de la imagen a agregar. + * + * @return int + * @access public + */ + function _X(&$MARCO, $width) { + $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation()); + switch ($this->_align) { + case 'left': + $X = 0; + break; + case 'center': + $X = ($ancho_pagina / 2) - ($width / 2); + break; + case 'right': + $X = $ancho_pagina - $width; + break; + } + return $X; + } } ?> \ No newline at end of file