------------------------------------------------------------------------------- $Id$ -----------------------------------------------------------------------------*/ 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; } } ?>