-----------------------------------------------------------------------------*/
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
* @access public
*/
- var $logo = '/home/mmarrese/public_html/meconlib/www/images/pdf_logo.jpg';
- //@FIXME Ponener el path del logo por defecto
+ var $logo;
/**
* Paginador.
* @var string $string
* @access public
*/
- var $titulo = true;
+ var $titulo;
/**
* SubTitulo.
* @var string $subtitulo
* @access public
*/
- var $subtitulo = true;
+ var $subtitulo;
+ /**
+ * Excepciones al encabezado
+ * @var array $excepciones
+ * @access protected
+ */
+ var $_excepciones = array ();
+
/**
* Class constructor.
*
* @access public
*/
function MECON_PDF_Marco($tam = "a4", $ori = "portrait") {
- $this->_pdf =& new MECON_PDF;
- $this->_tamanio = $tam;
- $this->_orientacion = $ori;
- $this->_config = include 'MECON/PDF/Marco/medidas.php' ;
- $this->_config = $this->_config[$tam][$ori];
- $this->MECON_HTML_Tabla();
+ $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);
+ $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;
+
+ }
}
/**
* @access protected
*/
function _addLogo() {
+ $this->_resetConf();
$conf = $this->_config['encabezado'];
if ($this->logo) {
- $this->_pdf->addImage($this->logo, $conf['logo']['X'],
+ $this->addImage($this->logo, $conf['logo']['X'],
$conf['logo']['Y'], null, 'jpg');
}
}
* @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']);
+ $this->addText($init, $conf['seccion']['Y'], $this->seccion,
+ $conf['seccion']);
}
}
* @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,
+ $this->addText($init, $conf['subseccion']['Y'], $this->subseccion,
$conf['subseccion']);
}
}
* @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 = 'Pagina '.$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,
+ $this->addText($init, $conf['paginador']['Y'], $txt,
$conf['paginador']);
}
}
* @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,
+ $this->addText($init, $conf['fecha']['Y'], $this->fecha,
$conf['fecha']);
}
}
* @access protected
*/
function _addHeaderRectangle() {
+ $this->_resetConf();
$conf = $this->_config['encabezado'];
//Armo el recuadro
- $this->_pdf->addRectangle ($conf['Yi'], $conf['Xi'], $conf['Yf'],
- $conf['Xf']);
- $this->_pdf->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'],
- $conf['linea1']['Xf'], $conf['linea1']['Yf']);
- $this->_pdf->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'],
- $conf['linea2']['Xf'], $conf['linea2']['Yf']);
+ $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.
*
* @access protected
*/
function _addTitle() {
+ $this->_resetConf();
$conf = $this->_config['titulo'];
if ($this->titulo) {
- $tmp = $this->_pdf->strlen($this->titulo, $conf);
- $tmp2 = $this->_config['Xf'] + abs($this->_config['Xi']);
+ $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 = $this->_config['Xi'] + ($tmp2 - $tmp) / 2;
- $this->_pdf->addText($init, $conf['Y'], $this->titulo,
+ $init = ($tmp2 - $tmp) / 2;
+ $this->addText($init, $conf['Y'], $this->titulo,
$conf);
}
}
* @access protected
*/
function _addSubTitle() {
+ $this->_resetConf();
$conf = $this->_config['subtitulo'];
if ($this->subtitulo) {
- $tmp = $this->_pdf->strlen($this->subtitulo, $conf);
- $tmp2 = $this->_config['Xf'] + abs($this->_config['Xi']);
+ $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 = $this->_config['Xi'] + ($tmp2 - $tmp) / 2;
- $this->_pdf->addText($init, $conf['Y'], $this->subtitulo,
+ $init = ($tmp2 - $tmp) / 2;
+ $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();
if ($subtitle) {
$this->_addSubTitle();
}
-// $this->_pdf->addLine($this->_config['Xi'], $this->_config['Yi'],
-// $this->_config['Xf'], $this->_config['Yi']);
}
/**
- * Funcion que devuelve el espacio dispobible en una pagina.
+ * Funcion que agrega el contenido al PDF.
*
- * @param int $pagina Numero de pagina.
- *
- * @return int
+ * @return void
* @access protected
*/
- function _getAvailableSpace($pagina) {
- if ($pagina === 1) {
- 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
+?>