X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/510e549ac73522250627fa1dba0b6ad46630d39a..1b946b6e47650fa5465986e2164fbaecdb46e393:/lib/MECON/PDF/Marco.php?ds=sidebyside diff --git a/lib/MECON/PDF/Marco.php b/lib/MECON/PDF/Marco.php index 610b98d..0005392 100644 --- a/lib/MECON/PDF/Marco.php +++ b/lib/MECON/PDF/Marco.php @@ -25,6 +25,8 @@ $Id$ -----------------------------------------------------------------------------*/ require_once 'MECON/PDF.php'; +require_once 'MECON/PDF/Separador.php'; +require_once 'MECON/PDF/HeaderDefecto.php'; /** * Libreria que crea un marco estandar para los pdfs. @@ -32,22 +34,15 @@ require_once 'MECON/PDF.php'; class MECON_PDF_Marco extends MECON_PDF { /** - * Tamanio de las paginas. - * @var string $tamanio - * @access public - */ - var $tamanio = "a4"; - - /** - * Orientacion (portrait o landscape). - * @var sting $orientacion - * @access public + * Objeto MECON_PDF_Separador que se utilizara por defecto. + * @var Object $separador + * @access protected */ - var $orientacion = "portrait"; + var $_separador_defecto; /** * Array de objetos MECON_PDF_Contenido - @ @var array $contenido + * @var array $contenido * @access protected */ var $_contenido = array(); @@ -116,36 +111,57 @@ class MECON_PDF_Marco extends MECON_PDF { * @access protected */ var $_excepciones = array (); + + /** + * MECON_PDF_Header. Objeto que hay que utilizar como enzabezado. Si hay + * algo aqui se desecha el encabezado por defecto. + * @var Object $header + * @access public + */ + var $header = null; /** * Class constructor. * * @param string $tam Tamanio de las hojas. * @param string $ori Orientacion de las hojaz (portrait o landscape). + * @param string $nom Nombre del archivo. * * @return void * @access public */ - function MECON_PDF_Marco($tam = "a4", $ori = "portrait") { - $this->MECON_PDF($tam); + function MECON_PDF_Marco($tam = "a4", $ori = "portrait", $nom = 'Doc.pdf') { + $this->MECON_PDF($tam, $ori, $nom); $this->tamanio = $tam; - $this->orientacion = $ori; + $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[$tam][$ori]; + $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. @@ -155,162 +171,31 @@ class MECON_PDF_Marco extends MECON_PDF { * @return void * @access public */ - function newPage($pagina = 'a4', $encabezado = true, $seccion = null, $subseccion = - null) - { - parent::newPage($pagina); + 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; + $this->espacioDisponible = $this->header->getAltura() - 27; if ($this->countPages() === 1) { if ($this->titulo || $this->subtitulo) { $this->espacioDisponible -= 27; } } if (!is_null($seccion)) { - $this->excepciones[$this->countPages()]['seccion'] = $seccion; + $this->_excepciones[$this->numPage()]['seccion'] = $seccion; } if (!is_null($subseccion)) { - $this->excepciones[$this->countPages()]['subseccion'] = $subseccion; + $this->_excepciones[$this->numPage()]['subseccion'] = $subseccion; } } else { - $this->espacioDisponible = $this->_config['encabezado']['Yf']; - $this->excepciones[$this->countPages()]['nova'] = true; + $this->espacioDisponible = $this->_config['Yf']; + $this->_excepciones[$this->countPages()]['nova'] = true; } } - /** - * Funcion que agrega el logo al encabezado de una pagina. - * - * @return void - * @access protected - */ - function _addLogo() { - $conf = $this->_config['encabezado']; - if ($this->logo) { - $this->addImage($this->logo, $conf['logo']['X'], - $conf['logo']['Y'], null, 'jpg', $this->orientacion); - } - } - - /** - * Funcion que agrega la seccion al encabezado de una pagina. - * - * @return void - * @access protected - */ - function _addSeccion() { - $conf = $this->_config['encabezado']; - if ($this->seccion) { - $tmp = $this->strlen($this->seccion, $conf['seccion']); - $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi']; - if ($tmp >= $tmp2) { - $this->seccion = $this->wrapLine ($this->seccion, $tmp2, - $conf['seccion']); - $tmp = $this->strlen($this->seccion, $conf['seccion']); - } - $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] - - $conf['linea1']['Xi'] - $tmp) / 2; - $this->addText($init, $conf['seccion']['Y'], $this->seccion, - $conf['seccion'], null, $this->orientacion); - } - } - - /** - * Funcion que agrega la subseccion al encabezado de una pagina. - * - * @return void - * @access protected - */ - function _addSubSeccion() { - $conf = $this->_config['encabezado']; - if ($this->subseccion) { - $tmp = $this->strlen($this->subseccion, $conf['subseccion']); - $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi']; - if ($tmp >= $tmp2) { - $this->subseccion = $this->wrapLine ($this->subseccion, $tmp2, - $conf['subseccion']); - $tmp = $this->strlen($this->subseccion, $conf['subseccion']); - } - $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi'] - - $conf['linea1']['Xi'] - $tmp) / 2; - $this->addText($init, $conf['subseccion']['Y'], $this->subseccion, - $conf['subseccion'], null, $this->orientacion); - } - } - - /** - * Funcion que agrega el paginador al encabezado de una pagina. - * - * @return void - * @access protected - */ - function _addPager() { - $conf = $this->_config['encabezado']; - if ($this->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->addText($init, $conf['paginador']['Y'], $txt, - $conf['paginador'], null, $this->orientacion); - } - } - - /** - * Funcion que permite agregar la fecha al encabezado de una pagina. - * - * @return void - * @access protected - */ - function _addDate() { - $conf = $this->_config['encabezado']; - if ($this->fecha) { - 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->strlen($this->fecha, $conf['fecha']); - $init = $conf['linea2']['Xi'] + ( $conf['Xf'] - - $conf['linea2']['Xi'] - $tmp) / 2; - $this->addText($init, $conf['fecha']['Y'], $this->fecha, - $conf['fecha'], null, $this->orientacion); - } - } - - /** - * Funcion que arma el recuadro del encabezado de las paginas. - * - * @return void - * @access protected - */ - function _addHeaderRectangle() { - $conf = $this->_config['encabezado']; - //Armo el recuadro - $this->addRectangle ($conf['Xi'], $conf['Yi'], $conf['Xf'], - $conf['Yf'], '', null, $this->orientacion); - $this->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'], - $conf['linea1']['Xf'], $conf['linea1']['Yf'], '', null, - $this->orientacion); - $this->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'], - $conf['linea2']['Xf'], $conf['linea2']['Yf'], '', null, - $this->orientacion); - } - - /* - * Funcion que obtiene el ancho de la pagina - * - * @return ancho de la pagina - * @access public - */ - function getWidth() { - return parent::getWidth($this->orientacion); - } - /** * Funcion que permite agregar el titulo a una pagina. * @@ -318,10 +203,11 @@ class MECON_PDF_Marco extends MECON_PDF { * @access protected */ function _addTitle() { + $this->_resetConf(); $conf = $this->_config['titulo']; if ($this->titulo) { $tmp = $this->strlen($this->titulo, $conf); - $tmp2 = $this->getWidth($this->orientacion); + $tmp2 = $this->getWidth(); if ($tmp >= $tmp2) { $this->titulo = $this->wrapLine ($this->titulo, $tmp2, $conf); @@ -329,7 +215,7 @@ class MECON_PDF_Marco extends MECON_PDF { } $init = ($tmp2 - $tmp) / 2; $this->addText($init, $conf['Y'], $this->titulo, - $conf, null, $this->orientacion); + $conf); } } @@ -340,10 +226,11 @@ class MECON_PDF_Marco extends MECON_PDF { * @access protected */ function _addSubTitle() { + $this->_resetConf(); $conf = $this->_config['subtitulo']; if ($this->subtitulo) { $tmp = $this->strlen($this->subtitulo, $conf); - $tmp2 = $this->getWidth($this->orientacion); + $tmp2 = $this->getWidth(); if ($tmp >= $tmp2) { $this->subtitulo = $this->wrapLine ($this->subtitulo, $tmp2, $conf); @@ -351,7 +238,7 @@ class MECON_PDF_Marco extends MECON_PDF { } $init = ($tmp2 - $tmp) / 2; $this->addText($init, $conf['Y'], $this->subtitulo, - $conf, null, $this->orientacion); + $conf); } } @@ -365,12 +252,8 @@ class MECON_PDF_Marco extends MECON_PDF { * @access protected */ function _buildHeader($title = true, $subtitle = true) { - $this->_addLogo(); - $this->_addSeccion(); - $this->_addSubseccion(); - $this->_addPager(); - $this->_addDate(); - $this->_addHeaderRectangle(); + //Agrego el header. + $this->header->toPdf($this); if ($title) { $this->_addTitle(); } @@ -379,6 +262,24 @@ class MECON_PDF_Marco extends MECON_PDF { } } + /** + * Funcion que crea el Header por defecto. + * + * @return void + * @access protected + */ + function _crearHeaderDefecto() { + $this->header =& new MECON_PDF_HeaderDefecto($this->tamanio, + $this->getOrientation($this->numPage())); + if (@$this->logo) { + $this->header->logo = $this->logo; + } + $this->header->seccion = $this->seccion; + $this->header->subseccion = $this->subseccion; + $this->header->paginador = $this->paginador; + $this->header->fecha = $this->fecha; + } + /** * Funcion que agrega el contenido al PDF. * @@ -386,6 +287,7 @@ class MECON_PDF_Marco extends MECON_PDF { * @access protected */ function _buildContent() { + $this->_resetConf(); if ($this->_contenido) { foreach ($this->_contenido as $cont) { $cont->toPDF($this); @@ -404,33 +306,38 @@ class MECON_PDF_Marco extends MECON_PDF { * @access public */ function toPDF() { - $this->newPage($this->tamanio); + //Veo si hay que utilizar o no el header por defecto. + if (!$this->header) { + $this->_crearHeaderDefecto(); + } + $this->_buildContent(); if ($this->getPages()) { $t = true; foreach ($this->getPages() as $page) { $this->_pagina_actual = $page; - $sec = $this->seccion; - $subsec = $this->subseccion; + $sec = $this->header->seccion; + $subsec = $this->header->subseccion; if (@$this->_excepciones[$this->numPage($page)]['seccion']) { - $this->seccion = + $this->header->seccion = $this->_excepciones[$this->numPage($page)]['seccion']; } if (@$this->_excepciones[$this->numPage($page)]['subseccion']) { - $this->subseccion = + $this->header->subseccion = $this->_excepciones[$this->numPage($page)]['subseccion']; } if (@!$this->_excepciones[$this->numPage($page)]['nova']) { $this->_buildHeader($t, $t); } + //Solo agrego el titulo y subtitulo en la primer hoja $t = false; - $this->seccion = $sec; - $this->subseccion = $subsec; + $this->header->seccion = $sec; + $this->header->subseccion = $subsec; } return parent::toPDF(); } @@ -446,9 +353,10 @@ class MECON_PDF_Marco extends MECON_PDF { * @access public */ function addContent($contenido, $separador = true) { - if ($separador && $this->getPages()) { - //@TODO Agregar el separador por defecto. - //$this->contenido[] = $separador_defecto + //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; }