X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/c3b42bba0c46c9510b6ca095dfab862ff97170e6..24694147d31511d51f2ccda4584c44a493297101:/lib/MECON/PDF/Marco.php diff --git a/lib/MECON/PDF/Marco.php b/lib/MECON/PDF/Marco.php index 397a5ae..5f9ae55 100644 --- a/lib/MECON/PDF/Marco.php +++ b/lib/MECON/PDF/Marco.php @@ -25,48 +25,41 @@ $Id$ -----------------------------------------------------------------------------*/ require_once 'MECON/PDF.php'; -require_once 'MECON/HTML/Tabla.php'; +require_once 'MECON/PDF/Separador.php'; /** * Libreria que crea un marco estandar para los pdfs. */ -class MECON_PDF_Marco extends MECON_HTML_Tabla { +class MECON_PDF_Marco extends MECON_PDF { /** - * Objeto MECON_PDF - * @var Object MECON_PDF + * Objeto MECON_PDF_Separador que se utilizara por defecto. + * @var Object $separador * @access protected */ - var $_pdf; - - /** - * Archivo de configuracion de medidas - * @var array $conf - * @access protected - */ - var $_config = array (); + var $_separador_defecto; /** - * Tamanio de las paginas. - * @var string $tamanio + * Array de objetos MECON_PDF_Contenido + * @var array $contenido * @access protected */ - var $_tamanio = "a4"; - + var $_contenido = array(); + /** - * Orientacion (portrait o landscape). - * @var sting $orientacion - * @access protected + * Espacio dispobible en la pagina. Representa la coordenada Y a partir de + * la cual se puede comenzar a escribir el contenido. + * @var int $espacioDisponible + * @access public */ - var $_orientacion = "portrait"; - + var $espacioDisponible; + /** * Logo. * @var string $logo * @access public */ - var $logo = '/home/mmarrese/public_html/meconlib/www/images/pdf_logo.jpg'; - //@FIXME Ponener el path del logo por defecto + var $logo; /** * Paginador. @@ -102,15 +95,22 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @var string $string * @access public */ - var $titulo = true; + var $titulo; /** * SubTitulo. * @var string $subtitulo * @access public */ - var $subtitulo = true; + var $subtitulo; + /** + * Excepciones al encabezado + * @var array $excepciones + * @access protected + */ + var $_excepciones = array (); + /** * Class constructor. * @@ -121,12 +121,73 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @access public */ function MECON_PDF_Marco($tam = "a4", $ori = "portrait") { - $this->_pdf =& new MECON_PDF; - $this->_tamanio = $tam; - $this->_orientacion = $ori; - $this->_config = include 'MECON/PDF/Marco/medidas.php' ; - $this->_config = $this->_config[$tam][$ori]; - $this->MECON_HTML_Tabla(); + $this->MECON_PDF($tam, $ori); + $this->tamanio = $tam; + $this->_resetConf(); + $this->_separador_defecto =& new MECON_PDF_Separador(); + } + + /** + * Funcion que setea los valores de conf para poder poner las cabeceras + * @access private + * @param int $pagina numero del la pagina de la que debe setear loa + * valores + * @return void + */ + function _resetConf($pagina = null) + { + if(is_null($pagina)); + $pagina = $this->numPage(); + $tmp = include 'MECON/PDF/Marco/medidas.php' ; + $tmp = $tmp[$this->tamanio][$this->getOrientation($pagina)]; + $tmp['Xi'] = $this->_config['Xi']; + $tmp['Yi'] = $this->_config['Yi']; + $tmp['Xf'] = $this->_config['Xf']; + $tmp['Yf'] = $this->_config['Yf']; + $this->_config = $tmp; + if (@$this->_config['encabezado']['logo']['path']) { + $this->logo = $this->_config['encabezado']['logo']['path']; + } + } + + /** + * 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 hoja + * @param bool $encabezado Indica si el encabezado debe ponerse en la + * pagina. + * @param string $seccion Seccion del encabezado para esta pagina nueva. + * @param string $subseccion SubSeccion del encabezado para esta pagina + * nueva. + * + * @return void + * @access public + */ + function newPage($pagina = 'a4', $orientacion = null, $encabezado = true, $seccion = null, $subseccion = + null) + { + parent::newPage($pagina, $orientacion); + $this->_resetConf(); + if ($encabezado) { + $this->espacioDisponible = $this->_config['encabezado']['Yi'] - 27; + if ($this->countPages() === 1) { + if ($this->titulo || $this->subtitulo) { + $this->espacioDisponible -= 27; + } + } + if (!is_null($seccion)) { + $this->_excepciones[$this->numPage()]['seccion'] = $seccion; + } + if (!is_null($subseccion)) { + $this->_excepciones[$this->numPage()]['subseccion'] = $subseccion; + } + } + else { + $this->espacioDisponible = $this->_config['encabezado']['Yf']; + $this->_excepciones[$this->countPages()]['nova'] = true; + + } } /** @@ -136,9 +197,10 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @access protected */ function _addLogo() { + $this->_resetConf(); $conf = $this->_config['encabezado']; if ($this->logo) { - $this->_pdf->addImage($this->logo, $conf['logo']['X'], + $this->addImage($this->logo, $conf['logo']['X'], $conf['logo']['Y'], null, 'jpg'); } } @@ -150,18 +212,20 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @access protected */ function _addSeccion() { + $this->_resetConf(); $conf = $this->_config['encabezado']; if ($this->seccion) { - $tmp = $this->_pdf->strlen($this->seccion, $conf['seccion']); + $tmp = $this->strlen($this->seccion, $conf['seccion']); $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi']; if ($tmp >= $tmp2) { - $this->seccion = $this->_pdf->wrapLine ($this->seccion, $tmp2, + $this->seccion = $this->wrapLine ($this->seccion, $tmp2, $conf['seccion']); - $tmp = $this->_pdf->strlen($this->seccion, $conf['seccion']); + $tmp = $this->strlen($this->seccion, $conf['seccion']); } $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] - $conf['linea1']['Xi'] - $tmp) / 2; - $this->_pdf->addText($init, $conf['seccion']['Y'], $this->seccion, $conf['seccion']); + $this->addText($init, $conf['seccion']['Y'], $this->seccion, + $conf['seccion']); } } @@ -172,18 +236,19 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @access protected */ function _addSubSeccion() { + $this->_resetConf(); $conf = $this->_config['encabezado']; if ($this->subseccion) { - $tmp = $this->_pdf->strlen($this->subseccion, $conf['subseccion']); + $tmp = $this->strlen($this->subseccion, $conf['subseccion']); $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi']; if ($tmp >= $tmp2) { - $this->subseccion = $this->_pdf->wrapLine ($this->subseccion, $tmp2, + $this->subseccion = $this->wrapLine ($this->subseccion, $tmp2, $conf['subseccion']); - $tmp = $this->_pdf->strlen($this->subseccion, $conf['subseccion']); + $tmp = $this->strlen($this->subseccion, $conf['subseccion']); } $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] - $conf['linea1']['Xi'] - $tmp) / 2; - $this->_pdf->addText($init, $conf['subseccion']['Y'], $this->subseccion, + $this->addText($init, $conf['subseccion']['Y'], $this->subseccion, $conf['subseccion']); } } @@ -195,14 +260,15 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @access protected */ function _addPager() { + $this->_resetConf(); $conf = $this->_config['encabezado']; if ($this->paginador) { - $txt = 'Pagina '.$this->_pdf->numPage().' de '. - $this->_pdf->countPages(); - $tmp = $this->_pdf->strlen($txt, $conf['paginador']); + $txt = 'Pagina '.$this->numPage().' de '. + $this->countPages(); + $tmp = $this->strlen($txt, $conf['paginador']); $init = $conf['linea2']['Xi'] + ( $conf['Xf'] - $conf['linea2']['Xi'] - $tmp) / 2; - $this->_pdf->addText($init, $conf['paginador']['Y'], $txt, + $this->addText($init, $conf['paginador']['Y'], $txt, $conf['paginador']); } } @@ -214,15 +280,19 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @access protected */ function _addDate() { + $this->_resetConf(); $conf = $this->_config['encabezado']; if ($this->fecha) { - if ($this->fecha === true) { + if (is_a($this->fecha, 'Date')) { + $this->fecha = $this->fecha->format("%d/%m/%Y"); + } + elseif ($this->fecha === true) { $this->fecha = date("d/m/Y"); } - $tmp = $this->_pdf->strlen($this->fecha, $conf['fecha']); + $tmp = $this->strlen($this->fecha, $conf['fecha']); $init = $conf['linea2']['Xi'] + ( $conf['Xf'] - $conf['linea2']['Xi'] - $tmp) / 2; - $this->_pdf->addText($init, $conf['fecha']['Y'], $this->fecha, + $this->addText($init, $conf['fecha']['Y'], $this->fecha, $conf['fecha']); } } @@ -234,16 +304,17 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @access protected */ function _addHeaderRectangle() { + $this->_resetConf(); $conf = $this->_config['encabezado']; //Armo el recuadro - $this->_pdf->addRectangle ($conf['Yi'], $conf['Xi'], $conf['Yf'], - $conf['Xf']); - $this->_pdf->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'], - $conf['linea1']['Xf'], $conf['linea1']['Yf']); - $this->_pdf->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'], - $conf['linea2']['Xf'], $conf['linea2']['Yf']); + $this->addRectangle ($conf['Xi'], $conf['Yi'], $conf['Xf'], + $conf['Yf'], ''); + $this->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'], + $conf['linea1']['Xf'], $conf['linea1']['Yf'], ''); + $this->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'], + $conf['linea2']['Xf'], $conf['linea2']['Yf'], ''); } - + /** * Funcion que permite agregar el titulo a una pagina. * @@ -251,17 +322,18 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @access protected */ function _addTitle() { + $this->_resetConf(); $conf = $this->_config['titulo']; if ($this->titulo) { - $tmp = $this->_pdf->strlen($this->titulo, $conf); - $tmp2 = $this->_config['Xf'] + abs($this->_config['Xi']); + $tmp = $this->strlen($this->titulo, $conf); + $tmp2 = $this->getWidth(); if ($tmp >= $tmp2) { - $this->titulo = $this->_pdf->wrapLine ($this->titulo, $tmp2, + $this->titulo = $this->wrapLine ($this->titulo, $tmp2, $conf); - $tmp = $this->_pdf->strlen($this->titulo, $conf); + $tmp = $this->strlen($this->titulo, $conf); } - $init = $this->_config['Xi'] + ($tmp2 - $tmp) / 2; - $this->_pdf->addText($init, $conf['Y'], $this->titulo, + $init = ($tmp2 - $tmp) / 2; + $this->addText($init, $conf['Y'], $this->titulo, $conf); } } @@ -273,31 +345,33 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { * @access protected */ function _addSubTitle() { + $this->_resetConf(); $conf = $this->_config['subtitulo']; if ($this->subtitulo) { - $tmp = $this->_pdf->strlen($this->subtitulo, $conf); - $tmp2 = $this->_config['Xf'] + abs($this->_config['Xi']); + $tmp = $this->strlen($this->subtitulo, $conf); + $tmp2 = $this->getWidth(); if ($tmp >= $tmp2) { - $this->subtitulo = $this->_pdf->wrapLine ($this->subtitulo, $tmp2, + $this->subtitulo = $this->wrapLine ($this->subtitulo, $tmp2, $conf); - $tmp = $this->_pdf->strlen($this->subtitulo, $conf); + $tmp = $this->strlen($this->subtitulo, $conf); } - $init = $this->_config['Xi'] + ($tmp2 - $tmp) / 2; - $this->_pdf->addText($init, $conf['Y'], $this->subtitulo, + $init = ($tmp2 - $tmp) / 2; + $this->addText($init, $conf['Y'], $this->subtitulo, $conf); } } /** - * Funcion que agrega la informacion del marco a la pagina actual. + * Funcion que agrega el encabezado a la pagina actual. * * @param bool $title Muetra o no el titulo. * @param bool $subtitle Muestra o no el subtitulo. * * @return void - * @access public + * @access protected */ - function buildPage($title = true, $subtitle = true) { + function _buildHeader($title = true, $subtitle = true) { + $this->_resetConf(); $this->_addLogo(); $this->_addSeccion(); $this->_addSubseccion(); @@ -310,26 +384,81 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { if ($subtitle) { $this->_addSubTitle(); } -// $this->_pdf->addLine($this->_config['Xi'], $this->_config['Yi'], -// $this->_config['Xf'], $this->_config['Yi']); } /** - * Funcion que devuelve el espacio dispobible en una pagina. + * Funcion que agrega el contenido al PDF. * - * @param int $pagina Numero de pagina. - * - * @return int + * @return void * @access protected */ - function _getAvailableSpace($pagina) { - if ($pagina === 1) { - return $this->_config['contenido']['Y']; + function _buildContent() { + $this->_resetConf(); + if ($this->_contenido) { + foreach ($this->_contenido as $cont) { + $cont->toPDF($this); + //MECON_PDF_Marco se pasa por referencia para que se agregen las + //paginas a medida que se van necesitando. Esto permite que varie el + //tipo de contenido que se agrega. + } } - else { - return $this->_config['titulo']['Y']; + } + + /** + * Funcion que se encarga de transformar la informacion para que se genere + * el archivo pdf. + * + * @return pdffile Archivo PDF. + * @access public + */ + function toPDF() { + $this->_buildContent(); + if ($this->getPages()) { + $t = true; + foreach ($this->getPages() as $page) { + $this->_pagina_actual = $page; + + $sec = $this->seccion; + $subsec = $this->subseccion; + + if (@$this->_excepciones[$this->numPage($page)]['seccion']) { + $this->seccion = + $this->_excepciones[$this->numPage($page)]['seccion']; + } + + if (@$this->_excepciones[$this->numPage($page)]['subseccion']) { + $this->subseccion = + $this->_excepciones[$this->numPage($page)]['subseccion']; + } + + if (@!$this->_excepciones[$this->numPage($page)]['nova']) { + $this->_buildHeader($t, $t); + } + $t = false; + + $this->seccion = $sec; + $this->subseccion = $subsec; + } + return parent::toPDF(); } } + /** + * Funcion que pemite agregar contenido al PDF. + * + * @param mixed $contenido Objeto contenido que se agrega. + * @param bool $separador Indicacion si hay que agregar un separador. + * + * @return void + * @access public + */ + function addContent($contenido, $separador = true) { + //Me aseguro de poner el separador siempre y cuando no sea el primer + //objeto de la primer pagina. + if ($separador && $this->_contenido) { + $this->_contenido[] = $this->_separador_defecto; + } + $this->_contenido[] = $contenido; + } } -?> \ No newline at end of file +?>