X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/f82ac09838f49891a683ca0cf345adf06b5e75f9..7ef61f7eebf93525862fd9b362dfd4c8ecf1c36b:/lib/MECON/PDF/Marco.php diff --git a/lib/MECON/PDF/Marco.php b/lib/MECON/PDF/Marco.php index 46d07e5..42fc4cb 100644 --- a/lib/MECON/PDF/Marco.php +++ b/lib/MECON/PDF/Marco.php @@ -25,41 +25,35 @@ $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 @@ -110,29 +104,91 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { */ var $subtitulo; + /** + * Excepciones al encabezado + * @var array $excepciones + * @access protected + */ + var $_excepciones = array (); + /** * 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->_pdf =& new MECON_PDF($tam); - $this->_tamanio = $tam; - $this->_orientacion = $ori; - $this->_config = include 'MECON/PDF/Marco/medidas.php' ; - $this->_config = $this->_config[$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(); + } + + /** + * 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']; } - $this->_config['Xi'] = $this->_pdf->config['Xi']; - $this->_config['Yi'] = $this->_pdf->config['Yi']; - $this->_config['Xf'] = $this->_pdf->config['Xf']; - $this->_config['Yf'] = $this->_pdf->config['Yf']; - $this->MECON_HTML_Tabla(); + } + + /** + * 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; + + } } /** @@ -142,10 +198,11 @@ 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'], - $conf['logo']['Y'], null, 'jpg', $this->_orientacion); + $this->addImage($this->logo, $conf['logo']['X'], + $conf['logo']['Y'], null, 'jpg'); } } @@ -156,19 +213,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'], null, $this->_orientacion); + $this->addText($init, $conf['seccion']['Y'], $this->seccion, + $conf['seccion']); } } @@ -179,19 +237,20 @@ 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, - $conf['subseccion'], null, $this->_orientacion); + $this->addText($init, $conf['subseccion']['Y'], $this->subseccion, + $conf['subseccion']); } } @@ -202,15 +261,16 @@ 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 = 'Página '.$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, - $conf['paginador'], null, $this->_orientacion); + $this->addText($init, $conf['paginador']['Y'], $txt, + $conf['paginador']); } } @@ -221,16 +281,20 @@ 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, - $conf['fecha'], null, $this->_orientacion); + $this->addText($init, $conf['fecha']['Y'], $this->fecha, + $conf['fecha']); } } @@ -241,18 +305,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['Xi'], $conf['Yi'], $conf['Xf'], - $conf['Yf'], '', null, $this->_orientacion); - $this->_pdf->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'], - $conf['linea1']['Xf'], $conf['linea1']['Yf'], '', null, - $this->_orientacion); - $this->_pdf->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'], - $conf['linea2']['Xf'], $conf['linea2']['Yf'], '', null, - $this->_orientacion); + $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. * @@ -260,18 +323,19 @@ 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->_pdf->getWidth($this->_orientacion); + $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 = ($tmp2 - $tmp) / 2; - $this->_pdf->addText($init, $conf['Y'], $this->titulo, - $conf, null, $this->_orientacion); + $this->addText($init, $conf['Y'], $this->titulo, + $conf); } } @@ -282,31 +346,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->_pdf->getWidth($this->_orientacion); + $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 = ($tmp2 - $tmp) / 2; - $this->_pdf->addText($init, $conf['Y'], $this->subtitulo, - $conf, null, $this->_orientacion); + $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(); @@ -322,21 +388,78 @@ class MECON_PDF_Marco extends MECON_HTML_Tabla { } /** - * Funcion que devuelve el espacio dispobible en una pagina. - * - * @param int $pagina Numero de pagina. + * Funcion que agrega el contenido al PDF. * - * @return int + * @return void * @access protected */ - function _getAvailableSpace($pagina) { - if ($pagina === 1 && $this->titulo && $this->subtitulo) { - 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 +?>