From: Martín Marrese Date: Fri, 23 Apr 2004 15:31:34 +0000 (+0000) Subject: Se agrega MECON_PDF_Imagen. Se modifican demas objetos para acomodar la funcionalidad. X-Git-Tag: svn_import~59 X-Git-Url: https://git.llucax.com/mecon/meconlib.git/commitdiff_plain/aaf936a8df4c040ac679c331da7d3137a4863fe4 Se agrega MECON_PDF_Imagen. Se modifican demas objetos para acomodar la funcionalidad. --- diff --git a/lib/MECON/PDF.php b/lib/MECON/PDF.php index a469ed0..a5e85e7 100644 --- a/lib/MECON/PDF.php +++ b/lib/MECON/PDF.php @@ -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 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 diff --git a/lib/MECON/PDF/Marco/medidas.php b/lib/MECON/PDF/Marco/medidas.php index 578a378..032fa64 100644 --- a/lib/MECON/PDF/Marco/medidas.php +++ b/lib/MECON/PDF/Marco/medidas.php @@ -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 index 0000000..2c7c9e0 --- /dev/null +++ b/test/PDF/pdf_imagen.php @@ -0,0 +1,46 @@ +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); + +?>