------------------------------------------------------------------------------- $Id$ -----------------------------------------------------------------------------*/ require_once 'MECON/PDF/external/phppdflib.class.php'; /** * Liberia base para el manejo de pdf's. */ class MECON_PDF { /** * Configuracion * @var arary $config * @access protected */ var $config; /** * Libreria externa. * @var int $pdf * @access private */ var $_pdf; /** * Identificacion de la pagina actual * @var int $pagina_actual * @access private */ var $_pagina_actual; /** * Array de paginas. * @var array $paginas * @access private */ var $_paginas; /** * Class constructor. * * @param string $tam Tipo de hoja * * @return void * @access public */ function MECON_PDF($tam = "a4") { $this->_pdf = new pdffile; $this->config = include 'MECON/PDF/medidas.php'; $this->config = $this->config[$tam]; } /** * Permite agregar nuevas paginas al pdf que se esta armando. * * @param string $pagina Tipo de pagina que se va a utilizar. * * @return void * @access public */ function newPage($pagina = "a4") { $this->_pagina_actual = $this->_pdf->new_page($pagina); $this->_paginas[] = $this->_pagina_actual; } /** * Funcion que genera el archivo y prepara los headers para que se envie. * * @return void * @access public */ function display() { header("Content-Disposition: filename=Doc.pdf"); header("Content-Type: application/pdf"); $temp = $this->toPDF(); header('Content-Length: ' . strlen($temp)); echo $temp; } /** * Funcion que devuelve el PDF. * * @return string * @access public */ function toPDF() { return $this->_pdf->generate(); } /** * Funcion que permite agregar texto a una pagina. * * @param int $X $X * @param int $Y $Y * @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, $transformacion = '') { $x = $X; $y = $Y; 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); } /** * Funcion que permite agregar un rectangulo a una pagina. * * @param int $Xi $Xi * @param int $Yi $Yi * @param int $Xf $Xf * @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, $transformacion = 'portrait') { $xi = $Xi; $yi = $Yi; $xf = $Xf; $yf = $Yf; 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); } /** * Funcion que permite agregar una linea a una pagina. * * @param int $Xi $Xi * @param int $Yi $Yi * @param int $Xf $Xf * @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, $transformacion = 'portrait') { $xi = $Xi; $yi = $Yi; $xf = $Xf; $yf = $Yf; 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. * * @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. * * @return void * @access public */ function addImage($archivo, $X, $Y, $pag = null, $formato = null, $transformacion = 'portrait') { $x = $X; $y = $Y; 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); break; } $formato = strtolower($formato); 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; } } /** * Funcion que wrappea una linea. * * @param strgin $texto Texto que quiere wrappearse. * @param int $l_max Largo maximo del texto. * @param array $attr Atributos del texto. * * @return string * @access public */ function wrapLine($texto, $l_max, $attr) { return $this->_pdf->wrap_line ($texto, $l_max, $attr); } /** * Funcion que wrappea una linea. * * @param strgin $texto Texto que quiere wrappearse. * @param int $l_max Largo maximo del texto. * @param array $attr Atributos del texto. * * @return string * @access public */ function wordWrap($texto, $l_max, $attr) { return $this->_pdf->word_wrap ($texto, $l_max, $attr); } /** * Funcion que calcula cuanto va a ocupar cierto texto segun su formato en * una pagina. * * @param strgin $texto Texto que quiere medirse. * @param array $attr Atributos del texto. * * @return int * @access public */ function strlen($texto, $attr = '') { return $this->_pdf->strlen($texto, $attr); } /** * Funcion que devuelve la cantidad de paginas que contiene el documento. * * @return int * @access public */ function countPages() { return count($this->_paginas); } /** * Funcion que devuelve el numero de la pagina actual. * * @param mixed $id Identificador de la pagina. * * @return int * @access public */ function numPage($id = null) { $id = ($id) ? $id : $this->_pagina_actual; return (array_search($id, $this->_paginas)) + 1; } /** * Funcion que devuelve la referencia de una pagina vitual. Si no se pasa * nada utilizo la actual. * * @param int $pag Numero de pagina. * * @return int * @access public */ function refPage($pag = null) { return $pag ? $this->_paginas[$pag - 1] : $this->_pagina_actual; } /** * Funcion que devuelve el array de paginas * * @return array * @access public */ 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($orientacion = 'portrait') { 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($orientacion = 'portrait') { 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']; } } ?>