-----------------------------------------------------------------------------*/
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 {
/**
- * 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();
* @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.
* @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::getWith($this->orientacion);
- }
-
/**
* Funcion que permite agregar el titulo a una pagina.
*
* @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);
}
$init = ($tmp2 - $tmp) / 2;
$this->addText($init, $conf['Y'], $this->titulo,
- $conf, null, $this->orientacion);
+ $conf);
}
}
* @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);
}
$init = ($tmp2 - $tmp) / 2;
$this->addText($init, $conf['Y'], $this->subtitulo,
- $conf, null, $this->orientacion);
+ $conf);
}
}
* @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();
}
}
}
+ /**
+ * 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.
*
* @access protected
*/
function _buildContent() {
+ $this->_resetConf();
if ($this->_contenido) {
foreach ($this->_contenido as $cont) {
$cont->toPDF($this);
* @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();
}
* @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;
}