------------------------------------------------------------------------------- $Id$ -----------------------------------------------------------------------------*/ require_once 'MECON/PDF.php'; require_once 'MECON/PDF/Separador.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 * @access protected */ var $_contenido = array(); /** * 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 $espacioDisponible; /** * Logo. * @var string $logo * @access public */ var $logo; /** * Paginador. * @var bool $paginador * @access public */ var $paginador = true; /** * Fecha. Si es true se pone la fecha del servidor, si es false no se pone * nada, en caso contrario se pone lo que haya en esta variable. * @var mixed $fecha * @access public */ var $fecha = true; /** * Seccion. * @var string $seccion * @access public */ var $seccion = ''; /** * SubSeccion. * @var string $subseccion * @access public */ var $subseccion = 'Ministerio de Economia'; /** * Titulo. * @var string $string * @access public */ var $titulo; /** * SubTitulo. * @var string $subtitulo * @access public */ 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). * * @return void * @access public */ function MECON_PDF_Marco($tam = "a4", $ori = "portrait") { $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); 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->countPages()]['seccion'] = $seccion; } if (!is_null($subseccion)) { $this->excepciones[$this->countPages()]['subseccion'] = $subseccion; } } else { $this->espacioDisponible = $this->_config['encabezado']['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. * * @return void * @access protected */ function _addTitle() { $this->_resetConf(); $conf = $this->_config['titulo']; if ($this->titulo) { $tmp = $this->strlen($this->titulo, $conf); $tmp2 = $this->getWidth(); if ($tmp >= $tmp2) { $this->titulo = $this->wrapLine ($this->titulo, $tmp2, $conf); $tmp = $this->strlen($this->titulo, $conf); } $init = ($tmp2 - $tmp) / 2; $this->addText($init, $conf['Y'], $this->titulo, $conf); } } /** * Funcion que permite agregar el subtitulo a una pagina. * * @return void * @access protected */ function _addSubTitle() { $this->_resetConf(); $conf = $this->_config['subtitulo']; if ($this->subtitulo) { $tmp = $this->strlen($this->subtitulo, $conf); $tmp2 = $this->getWidth(); if ($tmp >= $tmp2) { $this->subtitulo = $this->wrapLine ($this->subtitulo, $tmp2, $conf); $tmp = $this->strlen($this->subtitulo, $conf); } $init = ($tmp2 - $tmp) / 2; $this->addText($init, $conf['Y'], $this->subtitulo, $conf); } } /** * 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 protected */ function _buildHeader($title = true, $subtitle = true) { $this->_resetConf(); $this->_addLogo(); $this->_addSeccion(); $this->_addSubseccion(); $this->_addPager(); $this->_addDate(); $this->_addHeaderRectangle(); if ($title) { $this->_addTitle(); } if ($subtitle) { $this->_addSubTitle(); } } /** * Funcion que agrega el contenido al PDF. * * @return void * @access protected */ 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. } } } /** * Funcion que se encarga de transformar la informacion para que se genere * el archivo pdf. * * @return pdffile Archivo PDF. * @access public */ function toPDF() { // $this->newPage($this->tamanio); $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->_separador_defecto; } $this->_contenido[] = $contenido; } } ?>