]> git.llucax.com Git - mecon/meconlib.git/commitdiff
Se agrega MECON_PDF_Imagen. Se modifican demas objetos para acomodar la funcionalidad.
authorMartín Marrese <marrese@gmail.com>
Fri, 23 Apr 2004 15:31:34 +0000 (15:31 +0000)
committerMartín Marrese <marrese@gmail.com>
Fri, 23 Apr 2004 15:31:34 +0000 (15:31 +0000)
lib/MECON/PDF.php
lib/MECON/PDF/Imagen.php
lib/MECON/PDF/Marco/medidas.php
test/PDF/pdf_imagen.php [new file with mode: 0755]

index a469ed0c985a2c145daf4d0de3fee305d1b1ea03..a5e85e7dd94a750c07fadfe7a622de7ddaa25f84 100644 (file)
@@ -279,7 +279,7 @@ class MECON_PDF {
     }
 
     /**
-     * Funcion que permite agregar una imagen JPG a una pagina.
+     * Funcion que permite agregar una imagen JPG o PNG a una pagina.
      *
      * @param string $archivo Path completo del archivo imagen.
      * @param int    $X Posicion Horizontal.
@@ -287,12 +287,13 @@ class MECON_PDF {
      * @param int    $pag Numero de pagina virtual.
      * @param string $formato Formato del archivo (Extension).
      * @param string $transformacion Indica la orientacion de la pagina.
+     * @param array  $param Parametros de la libreria.
      *
      * @return void
      * @access public
      */
     function addImage($archivo, $X, $Y, $pag = null, $formato = null,
-            $transformacion = null) {
+            $transformacion = null, $param = array()) {
         $x = $X;
         $y = $Y;
         if(is_null($transformacion))
@@ -305,19 +306,22 @@ class MECON_PDF {
             case 'landscape':
                 $X = $this->_landscapeX($x,$y);
                 $Y = $this->_landscapeY($x,$y);
+                $param['rotation'] = 90;
                 break;
         }
         $formato = strtolower($formato);
+        $fh = fopen($archivo, "r"); 
+        $filedata = fread($fh, filesize($archivo));
+        fclose($fh);
         switch ($formato) {
             case 'jpg':
-                $fh = fopen($archivo, "r"); 
-                $filedata = fread($fh, filesize($archivo));
-                fclose($fh);
                 $image = $this->_pdf->jfif_embed($filedata);
-                $this->_pdf->image_place($image, $Y, $X, 
-                        $this->refPage($pag));
+                break;
+            case 'png':
+                $image = $this->_pdf->png_embed($filedata);
                 break;
         }
+        $this->_pdf->image_place($image, $Y, $X, $this->refPage($pag), $param);
     }
 
     /**
@@ -525,5 +529,14 @@ class MECON_PDF {
     {
         return $y + $this->_config['Yi'];
     }
+
+    /**
+     * Funcion que devuelve el tamaño de una imagen.
+     *
+     * @param $oid Object id
+     */
+    function getImageSize($oid) {
+        return $this->get_image_size($oid);
+    }
 }
 ?>
\ No newline at end of file
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
index 578a378770bac23f02950e8f310ddbbe207b032b..032fa64c57d7f1d7afbd38491df628cf91117ca1 100644 (file)
@@ -121,9 +121,9 @@ return array (
                                 'Yf' => 530,
                                 'logo' => array (
                                         'X' => 7,
-                                        'Y' => 521,
+                                        'Y' => 495,
                                         'path' =>
-                                        '/var/www/meconlib/www/images/pdf_logo_landscape.jpg',
+                                        '/var/www/meconlib/www/images/pdf_logo_portrait.jpg',
                                     ),
                                 'linea1' => array (
                                         'Xi' => 150,
@@ -249,9 +249,9 @@ return array (
                                 'Yf' => 540,
                                 'logo' => array (
                                         'X' => 7,
-                                        'Y' => 531,
+                                        'Y' => 505,
                                         'path' =>
-                                        '/var/www/meconlib/www/images/pdf_logo_landscape.jpg',
+                                        '/var/www/meconlib/www/images/pdf_logo_portrait.jpg',
                                     ),
                                 'linea1' => array (
                                         'Xi' => 150,
diff --git a/test/PDF/pdf_imagen.php b/test/PDF/pdf_imagen.php
new file mode 100755 (executable)
index 0000000..2c7c9e0
--- /dev/null
@@ -0,0 +1,46 @@
+<?php 
+require_once 'MECON/general.php';
+prepend_include_path('/home/mmarrese/public_html/meconlib/lib/');
+
+require_once 'MECON/PDF/Marco.php';
+require_once 'MECON/PDF/Texto.php';
+require_once 'MECON/PDF/Imagen.php';
+require_once 'Image/Transform.php';
+
+
+$img =& Image_Transform::factory('IM');
+
+$img->load('death.jpg');
+
+
+
+$orientacion = 'landscape';
+$encabezado = true;
+
+$param = array (
+//            'rotation' => '90'
+        );
+
+$PDF_MARCO =& new MECON_PDF_Marco ('a4', $orientacion);
+$PDF_IMAGEN =& new MECON_PDF_Imagen ($img, 'left', $orientacion, $encabezado,
+        $param);
+
+$PDF_TEXTO =& new MECON_PDF_TEXTO ($orientacion, $encabezado);
+$PDF_TEXTO->addContent (
+        'TEXTO PRE IMAGEN asdddddddddddddddddddddddddddddddddddddddddddd asdddddddddddddddddddddd asddddddddddd'
+        );
+$PDF_MARCO->addContent($PDF_TEXTO, true);
+$PDF_MARCO->addContent($PDF_IMAGEN, true);
+$PDF_TEXTO =& new MECON_PDF_TEXTO ($orientacion, $encabezado);
+$PDF_TEXTO->addContent (
+        'TEXTO POST IMAGEN asdddddddddddddddddddddddddddddddddddddddddddd asdddddddddddddddddddddd asddddddddddd'
+        );
+$PDF_MARCO->addContent($PDF_TEXTO, true);
+
+$PDF_MARCO->display();
+$img->free();
+exit;
+
+$img->rotate(90);
+
+?>