X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/0dbb40b231defb31e62e2c0a56c1bc1abd85ec06..e16973f3e09a6f9624cc3f10a1f0a365763bb69f:/lib/MECON/PDF/Marco.php diff --git a/lib/MECON/PDF/Marco.php b/lib/MECON/PDF/Marco.php index f3fe312..0005392 100644 --- a/lib/MECON/PDF/Marco.php +++ b/lib/MECON/PDF/Marco.php @@ -25,16 +25,24 @@ $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. */ class MECON_PDF_Marco extends MECON_PDF { + /** + * Objeto MECON_PDF_Separador que se utilizara por defecto. + * @var Object $separador + * @access protected + */ + var $_separador_defecto; /** * Array de objetos MECON_PDF_Contenido - @ @var array $contenido + * @var array $contenido * @access protected */ var $_contenido = array(); @@ -103,20 +111,30 @@ 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, $ori); + function MECON_PDF_Marco($tam = "a4", $ori = "portrait", $nom = 'Doc.pdf') { + $this->MECON_PDF($tam, $ori, $nom); $this->tamanio = $tam; $this->_resetConf(); + $this->_separador_defecto =& new MECON_PDF_Separador(); } /** @@ -129,7 +147,7 @@ class MECON_PDF_Marco extends MECON_PDF { function _resetConf($pagina = null) { if(is_null($pagina)); - $pagina = $this->numPage(); + $pagina = $this->numPage(); $tmp = include 'MECON/PDF/Marco/medidas.php' ; $tmp = $tmp[$this->tamanio][$this->getOrientation($pagina)]; $tmp['Xi'] = $this->_config['Xi']; @@ -137,9 +155,6 @@ class MECON_PDF_Marco extends MECON_PDF { $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']; - } } /** @@ -156,156 +171,31 @@ class MECON_PDF_Marco extends MECON_PDF { * @return void * @access public */ - function newPage($pagina = 'a4', $orientacion = null, $encabezado = true, $seccion = null, $subseccion = - null) - { + 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() { - $this->_resetConf(); - $conf = $this->_config['encabezado']; - if ($this->logo) { - $this->addImage($this->logo, $conf['logo']['X'], - $conf['logo']['Y'], null, 'jpg'); - } - } - - /** - * Funcion que agrega la seccion al encabezado de una pagina. - * - * @return void - * @access protected - */ - function _addSeccion() { - $this->_resetConf(); - $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']); - } - } - - /** - * Funcion que agrega la subseccion al encabezado de una pagina. - * - * @return void - * @access protected - */ - function _addSubSeccion() { - $this->_resetConf(); - $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']); - } - } - - /** - * Funcion que agrega el paginador al encabezado de una pagina. - * - * @return void - * @access protected - */ - function _addPager() { - $this->_resetConf(); - $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']); - } - } - - /** - * Funcion que permite agregar la fecha al encabezado de una pagina. - * - * @return void - * @access protected - */ - function _addDate() { - $this->_resetConf(); - $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']); - } - } - - /** - * Funcion que arma el recuadro del encabezado de las paginas. - * - * @return void - * @access protected - */ - function _addHeaderRectangle() { - $this->_resetConf(); - $conf = $this->_config['encabezado']; - //Armo el recuadro - $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. * @@ -362,13 +252,8 @@ class MECON_PDF_Marco extends MECON_PDF { * @access protected */ function _buildHeader($title = true, $subtitle = true) { - $this->_resetConf(); - $this->_addLogo(); - $this->_addSeccion(); - $this->_addSubseccion(); - $this->_addPager(); - $this->_addDate(); - $this->_addHeaderRectangle(); + //Agrego el header. + $this->header->toPdf($this); if ($title) { $this->_addTitle(); } @@ -377,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. * @@ -403,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(); } @@ -445,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; }