]> git.llucax.com Git - mecon/meconlib.git/blobdiff - lib/MECON/PDF/Imagen.php
- Cambio el uso de ->_database del mtodo getDependencias para permitir que
[mecon/meconlib.git] / lib / MECON / PDF / Imagen.php
index 92928038e499cd50938ce2f4a399b9f2a6b0c41b..ce52b670e716a8c210ea00475c61c34d1fd5ccf7 100644 (file)
@@ -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