X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/c3b42bba0c46c9510b6ca095dfab862ff97170e6..cf1f71752ba7c60a275cd3671e17523624448720:/lib/MECON/PDF.php diff --git a/lib/MECON/PDF.php b/lib/MECON/PDF.php index bbd2ed8..a5e85e7 100644 --- a/lib/MECON/PDF.php +++ b/lib/MECON/PDF.php @@ -30,11 +30,34 @@ require_once 'MECON/PDF/external/phppdflib.class.php'; * Liberia base para el manejo de pdf's. */ class MECON_PDF { + + /** + * Orientacion (portrait o landscape). + * @var sting $orientacion + * @access public + */ + var $orientacion = "portrait"; + + /** + * + * Orientacion cambiada, indica la orientacion de la pagina cuando es + * distinto al comun + * @var array $orientacion_distinta + * @access protected + */ + var $_orientacion_distinta = array(); + + /** + * Configuracion + * @var arary $config + * @access protected + */ + var $_config = array (); /** * Libreria externa. * @var int $pdf - * @access private + * @access protected */ var $_pdf; @@ -50,31 +73,70 @@ class MECON_PDF { * @var array $paginas * @access private */ - var $_paginas; + var $_paginas = array(); + + /** + * Nombre del archivo resultado para el display. + * @var sting $nombre + * @access private + */ + var $_nombre; /** * Class constructor. * + * @param string $tam Tipo de hoja + * @param string $ori Orientacion de las hojas (portrait o landscape). + * @param string $nombre Nombre del archivo PDF. + * * @return void * @access public */ - function MECON_PDF() + function MECON_PDF($tam = "a4", $ori = "portrait", $nombre = "Doc.pdf") { + setlocale (LC_ALL, 'en_US'); + $this->orientacion = $ori; $this->_pdf = new pdffile; + $this->_config = include 'MECON/PDF/medidas.php'; + $this->_config = $this->_config[$tam]; + $this->_nombre = $nombre; } /** * Permite agregar nuevas paginas al pdf que se esta armando. * * @param string $pagina Tipo de pagina que se va a utilizar. + * @param string $orientacion Orientacion de la pagina en particular. * * @return void * @access public */ - function newPage($pagina = "a4") + function newPage($pagina = "a4", $orientacion = null) { $this->_pagina_actual = $this->_pdf->new_page($pagina); $this->_paginas[] = $this->_pagina_actual; + if(!is_null($orientacion) && $orientacion != $this->orientacion) + $this->_orientacion_distinta[$this->numPage()] = $orientacion; + } + + /** + * Funcion que retorna la orientacion de la pagina indicada. + * Si no se indica, toma la orientacion de la ultima pagina. + * + * @param int $pagina Numero de la pagina. + * + * @access public + * @return int + */ + function getOrientation($pagina = null) + { + if(is_null($pagina)) + $pagina = $this->numPage(); + + if(isset($this->_orientacion_distinta[$pagina])) + return $this->_orientacion_distinta[$pagina]; + else + return $this->orientacion; } /** @@ -85,7 +147,7 @@ class MECON_PDF { */ function display() { - header("Content-Disposition: filename=Doc.pdf"); + header("Content-Disposition: filename=".$this->_nombre); header("Content-Type: application/pdf"); $temp = $this->toPDF(); header('Content-Length: ' . strlen($temp)); @@ -110,12 +172,28 @@ class MECON_PDF { * @param string $texto $texto * @param int $estilo $estilo * @param int $pag Numero de pagina virtual. + * @param string $transformacion Indica la orientacion de la pagina. * * @return void * @access public */ - function addText($X, $Y, $texto, $estilo = '', $pag = null) - { + function addText($X, $Y, $texto, $estilo = '', $pag = null, $transformacion + = null) { + $x = $X; + $y = $Y; + if(is_null($transformacion)) + $transformacion = $this->getOrientation($pag); + switch (strtolower($transformacion)) { + case 'portrait': + $X = $this->_portraitX($x,$y); + $Y = $this->_portraitY($x,$y); + break; + case 'landscape': + $X = $this->_landscapeX($x,$y); + $Y = $this->_landscapeY($x,$y); + @$estilo['rotation'] += 90; + break; + } $this->_pdf->draw_text($X, $Y, $texto, $this->refPage($pag), $estilo); } @@ -128,13 +206,35 @@ class MECON_PDF { * @param int $Yf $Yf * @param long $estilo $estilo * @param int $pag Numero de pagina virtual. + * @param string $transformacion Indica la orientacion de la pagina. * * @return void * @access public */ - function addRectangle($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null) + function addRectangle($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null, + $transformacion = null) { - $this->_pdf->draw_rectangle($Xi, $Yi, $Xf, $Yf, $this->refPage($pag), $estilo); + $xi = $Xi; + $yi = $Yi; + $xf = $Xf; + $yf = $Yf; + if(is_null($transformacion)) + $transformacion = $this->getOrientation($pag); + switch (strtolower($transformacion)) { + case 'portrait': + $Xi = $this->_portraitX($xi,$yi); + $Yi = $this->_portraitY($xi,$yi); + $Xf = $this->_portraitX($xf,$yf); + $Yf = $this->_portraitY($xf,$yf); + break; + case 'landscape': + $Xi = $this->_landscapeX($xi,$yi); + $Yi = $this->_landscapeY($xi,$yi); + $Xf = $this->_landscapeX($xf,$yf); + $Yf = $this->_landscapeY($xf,$yf); + break; + } + $this->_pdf->draw_rectangle($Yi, $Xi, $Yf, $Xf, $this->refPage($pag), $estilo); } /** @@ -146,40 +246,82 @@ class MECON_PDF { * @param int $Yf $Yf * @param int $estilo $estilo * @param int $pag Numero de pagina virtual. + * @param string $transformacion Indica la orientacion de la pagina. * * @return void * @access public */ - function addLine($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null) + function addLine($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null, + $transformacion = null) { - $this->_pdf->draw_line(array($Xi,$Xf),array($Yi,$Yf), + $xi = $Xi; + $yi = $Yi; + $xf = $Xf; + $yf = $Yf; + if(is_null($transformacion)) + $transformacion = $this->getOrientation($pag); + switch (strtolower($transformacion)) { + case 'portrait': + $Xi = $this->_portraitX($xi,$yi); + $Yi = $this->_portraitY($xi,$yi); + $Xf = $this->_portraitX($xf,$yf); + $Yf = $this->_portraitY($xf,$yf); + break; + case 'landscape': + $Xi = $this->_landscapeX($xi,$yi); + $Yi = $this->_landscapeY($xi,$yi); + $Xf = $this->_landscapeX($xf,$yf); + $Yf = $this->_landscapeY($xf,$yf); + break; + } + $this->_pdf->draw_line(array($Xi,$Xf),array($Yi,$Yf), $this->refPage($pag),$estilo); } /** - * 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. * @param int $Y Posixion vertical. * @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) { + function addImage($archivo, $X, $Y, $pag = null, $formato = null, + $transformacion = null, $param = array()) { + $x = $X; + $y = $Y; + if(is_null($transformacion)) + $transformacion = $this->getOrientation($pag); + switch (strtolower($transformacion)) { + case 'portrait': + $X = $this->_portraitX($x,$y); + $Y = $this->_portraitY($x,$y); + break; + 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); } /** @@ -193,7 +335,15 @@ class MECON_PDF { * @access public */ function wrapLine($texto, $l_max, $attr) { - return $this->_pdf->wrap_line ($texto, $l_max, $attr); + //El if lo estoy haciendo porque en la funcion wordwrap de la libreria + //externa no tienen en cuenta que te pueden pasar un texto vacio a + //wrapear -> Amerita un mail a los autores. + if ($texto) { + return $this->_pdf->wrap_line ($texto, $l_max, $attr); + } + else { + return ''; + } } /** @@ -207,7 +357,15 @@ class MECON_PDF { * @access public */ function wordWrap($texto, $l_max, $attr) { - return $this->_pdf->word_wrap ($texto, $l_max, $attr); + //El if lo estoy haciendo porque en la funcion wordwrap de la libreria + //externa no tienen en cuenta que te pueden pasar un texto vacio a + //wrapear -> Amerita un mail a los autores. + if ($texto) { + return $this->_pdf->word_wrap ($texto, $l_max, $attr); + } + else { + return array(); + } } /** @@ -270,5 +428,115 @@ class MECON_PDF { function getPages() { return $this->_paginas; } + + /** + * Funcion que devuelve el ancho de la pagina. + * + * @param string $orientacion Orientacion de la pagina. + * + * @return int + * @access public + */ + function getWidth($pagina = null, $orientacion = null) + { + if(is_null($orientacion)) + $orientacion = $this->getOrientation($pagina); + switch (strtolower($orientacion)) { + case 'landscape': + $width = $this->_config['Yf'] - $this->_config['Yi']; + break; + default: + $width = $this->_config['Xf'] - $this->_config['Xi']; + } + return $width; + + } + + /** + * Funcion que devuelve el alto de la pagina. + * + * @param string $orientacion Orientacion de la pagina. + * + * @return int + * @access public + */ + function getHeight($pagina = null, $orientacion = null) + { + if(is_null($orientacion)) + $orientacion = $this->getOrientation($pagina); + switch (strtolower($orientacion)) { + case 'landscape': + $height = $this->_config['Xf'] - $this->_config['Xi']; + break; + default: + $height = $this->_config['Yf'] - $this->_config['Yi']; + } + return $height; + } + + /** + * Funcion que devuelve la rotacion y traslacion para landscape. Variable X. + * + * @param int $x X + * @param int $y Y + * + * @return int + * @access protected + */ + function _landscapeX($x, $y) + { + return -$y + $this->_config['Xf']; + } + + /** + * Funcion que devuelve la rotacion y traslacion para landscape. Variable Y. + * + * @param int $x X + * @param int $y Y + * + * @return int + * @access protected + */ + function _landscapeY($x, $y) + { + return $x + $this->_config['Yi']; + } + + /** + * Funcion que devuelve la traslacion para portrait. Variable X. + * + * @param int $x X + * @param int $y Y + * + * @return int + * @access protected + */ + function _portraitX($x, $y) + { + return $x + $this->_config['Xi']; + } + + /** + * Funcion que devuelve la traslacion para portrait. Variable Y. + * + * @param int $x X + * @param int $y Y + * + * @return int + * @access protected + */ + function _portraitY($x, $y) + { + 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