1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
3 Ministerio de EconomÃa
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
8 meconlib is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2 of the License, or (at your option)
13 meconlib is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License; if not,
18 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19 Boston, MA 02111-1307 USA
20 -------------------------------------------------------------------------------
21 Creado: Fri Oct 24 16:34:11 2003
22 Autor: Martin Marrese <mmarre@mecon.gov.ar>
23 -------------------------------------------------------------------------------
25 -----------------------------------------------------------------------------*/
27 require_once 'MECON/PDF.php';
30 * Libreria que crea un marco estandar para los pdfs.
32 class MECON_PDF_Marco extends MECON_PDF {
36 * Array de objetos MECON_PDF_Contenido
37 @ @var array $contenido
40 var $_contenido = array();
43 * Espacio dispobible en la pagina. Representa la coordenada Y a partir de
44 * la cual se puede comenzar a escribir el contenido.
45 * @var int $espacioDisponible
48 var $espacioDisponible;
59 * @var bool $paginador
62 var $paginador = true;
65 * Fecha. Si es true se pone la fecha del servidor, si es false no se pone
66 * nada, en caso contrario se pone lo que haya en esta variable.
74 * @var string $seccion
81 * @var string $subseccion
84 var $subseccion = 'Ministerio de Economia';
95 * @var string $subtitulo
101 * Excepciones al encabezado
102 * @var array $excepciones
105 var $_excepciones = array ();
110 * @param string $tam Tamanio de las hojas.
111 * @param string $ori Orientacion de las hojaz (portrait o landscape).
116 function MECON_PDF_Marco($tam = "a4", $ori = "portrait") {
117 $this->MECON_PDF($tam, $ori);
118 $this->tamanio = $tam;
123 * Funcion que setea los valores de conf para poder poner las cabeceras
125 * @param int $pagina numero del la pagina de la que debe setear loa
129 function _resetConf($pagina = null)
131 if(is_null($pagina));
132 $pagina = $this->numPage();
133 $tmp = include 'MECON/PDF/Marco/medidas.php' ;
134 $tmp = $tmp[$this->tamanio][$this->getOrientation($pagina)];
135 $tmp['Xi'] = $this->_config['Xi'];
136 $tmp['Yi'] = $this->_config['Yi'];
137 $tmp['Xf'] = $this->_config['Xf'];
138 $tmp['Yf'] = $this->_config['Yf'];
139 $this->_config = $tmp;
140 if (@$this->_config['encabezado']['logo']['path']) {
141 $this->logo = $this->_config['encabezado']['logo']['path'];
146 * Permite agregar nuevas paginas al pdf que se esta armando.
148 * @param string $pagina Tipo de pagina que se va a utilizar.
149 * @param string $orientacion Orientacion de la hoja
150 * @param bool $encabezado Indica si el encabezado debe ponerse en la
152 * @param string $seccion Seccion del encabezado para esta pagina nueva.
153 * @param string $subseccion SubSeccion del encabezado para esta pagina
159 function newPage($pagina = 'a4', $orientacion = null, $encabezado = true, $seccion = null, $subseccion =
162 parent::newPage($pagina, $orientacion);
164 $this->espacioDisponible = $this->_config['encabezado']['Yi'] - 27;
165 if ($this->countPages() === 1) {
166 if ($this->titulo || $this->subtitulo) {
167 $this->espacioDisponible -= 27;
170 if (!is_null($seccion)) {
171 $this->excepciones[$this->countPages()]['seccion'] = $seccion;
173 if (!is_null($subseccion)) {
174 $this->excepciones[$this->countPages()]['subseccion'] = $subseccion;
178 $this->espacioDisponible = $this->_config['encabezado']['Yf'];
179 $this->excepciones[$this->countPages()]['nova'] = true;
185 * Funcion que agrega el logo al encabezado de una pagina.
190 function _addLogo() {
192 $conf = $this->_config['encabezado'];
194 $this->addImage($this->logo, $conf['logo']['X'],
195 $conf['logo']['Y'], null, 'jpg');
200 * Funcion que agrega la seccion al encabezado de una pagina.
205 function _addSeccion() {
207 $conf = $this->_config['encabezado'];
208 if ($this->seccion) {
209 $tmp = $this->strlen($this->seccion, $conf['seccion']);
210 $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
212 $this->seccion = $this->wrapLine ($this->seccion, $tmp2,
214 $tmp = $this->strlen($this->seccion, $conf['seccion']);
216 $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi']
217 - $conf['linea1']['Xi'] - $tmp) / 2;
218 $this->addText($init, $conf['seccion']['Y'], $this->seccion,
224 * Funcion que agrega la subseccion al encabezado de una pagina.
229 function _addSubSeccion() {
231 $conf = $this->_config['encabezado'];
232 if ($this->subseccion) {
233 $tmp = $this->strlen($this->subseccion, $conf['subseccion']);
234 $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
236 $this->subseccion = $this->wrapLine ($this->subseccion, $tmp2,
237 $conf['subseccion']);
238 $tmp = $this->strlen($this->subseccion, $conf['subseccion']);
240 $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi']
241 - $conf['linea1']['Xi'] - $tmp) / 2;
242 $this->addText($init, $conf['subseccion']['Y'], $this->subseccion,
243 $conf['subseccion']);
248 * Funcion que agrega el paginador al encabezado de una pagina.
253 function _addPager() {
255 $conf = $this->_config['encabezado'];
256 if ($this->paginador) {
257 $txt = 'Pagina '.$this->numPage().' de '.
259 $tmp = $this->strlen($txt, $conf['paginador']);
260 $init = $conf['linea2']['Xi'] + ( $conf['Xf']
261 - $conf['linea2']['Xi'] - $tmp) / 2;
262 $this->addText($init, $conf['paginador']['Y'], $txt,
268 * Funcion que permite agregar la fecha al encabezado de una pagina.
273 function _addDate() {
275 $conf = $this->_config['encabezado'];
277 if (is_a($this->fecha, 'Date')) {
278 $this->fecha = $this->fecha->format("%d/%m/%Y");
280 elseif ($this->fecha === true) {
281 $this->fecha = date("d/m/Y");
283 $tmp = $this->strlen($this->fecha, $conf['fecha']);
284 $init = $conf['linea2']['Xi'] + ( $conf['Xf']
285 - $conf['linea2']['Xi'] - $tmp) / 2;
286 $this->addText($init, $conf['fecha']['Y'], $this->fecha,
292 * Funcion que arma el recuadro del encabezado de las paginas.
297 function _addHeaderRectangle() {
299 $conf = $this->_config['encabezado'];
301 $this->addRectangle ($conf['Xi'], $conf['Yi'], $conf['Xf'],
303 $this->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'],
304 $conf['linea1']['Xf'], $conf['linea1']['Yf'], '');
305 $this->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'],
306 $conf['linea2']['Xf'], $conf['linea2']['Yf'], '');
310 * Funcion que permite agregar el titulo a una pagina.
315 function _addTitle() {
317 $conf = $this->_config['titulo'];
319 $tmp = $this->strlen($this->titulo, $conf);
320 $tmp2 = $this->getWidth();
322 $this->titulo = $this->wrapLine ($this->titulo, $tmp2,
324 $tmp = $this->strlen($this->titulo, $conf);
326 $init = ($tmp2 - $tmp) / 2;
327 $this->addText($init, $conf['Y'], $this->titulo,
333 * Funcion que permite agregar el subtitulo a una pagina.
338 function _addSubTitle() {
340 $conf = $this->_config['subtitulo'];
341 if ($this->subtitulo) {
342 $tmp = $this->strlen($this->subtitulo, $conf);
343 $tmp2 = $this->getWidth();
345 $this->subtitulo = $this->wrapLine ($this->subtitulo, $tmp2,
347 $tmp = $this->strlen($this->subtitulo, $conf);
349 $init = ($tmp2 - $tmp) / 2;
350 $this->addText($init, $conf['Y'], $this->subtitulo,
356 * Funcion que agrega el encabezado a la pagina actual.
358 * @param bool $title Muetra o no el titulo.
359 * @param bool $subtitle Muestra o no el subtitulo.
364 function _buildHeader($title = true, $subtitle = true) {
367 $this->_addSeccion();
368 $this->_addSubseccion();
371 $this->_addHeaderRectangle();
376 $this->_addSubTitle();
381 * Funcion que agrega el contenido al PDF.
386 function _buildContent() {
388 if ($this->_contenido) {
389 foreach ($this->_contenido as $cont) {
391 //MECON_PDF_Marco se pasa por referencia para que se agregen las
392 //paginas a medida que se van necesitando. Esto permite que varie el
393 //tipo de contenido que se agrega.
399 * Funcion que se encarga de transformar la informacion para que se genere
402 * @return pdffile Archivo PDF.
406 $this->newPage($this->tamanio);
407 $this->_buildContent();
408 if ($this->getPages()) {
410 foreach ($this->getPages() as $page) {
411 $this->_pagina_actual = $page;
413 $sec = $this->seccion;
414 $subsec = $this->subseccion;
416 if (@$this->_excepciones[$this->numPage($page)]['seccion']) {
418 $this->_excepciones[$this->numPage($page)]['seccion'];
421 if (@$this->_excepciones[$this->numPage($page)]['subseccion']) {
423 $this->_excepciones[$this->numPage($page)]['subseccion'];
426 if (@!$this->_excepciones[$this->numPage($page)]['nova']) {
427 $this->_buildHeader($t, $t);
431 $this->seccion = $sec;
432 $this->subseccion = $subsec;
434 return parent::toPDF();
439 * Funcion que pemite agregar contenido al PDF.
441 * @param mixed $contenido Objeto contenido que se agrega.
442 * @param bool $separador Indicacion si hay que agregar un separador.
447 function addContent($contenido, $separador = true) {
448 if ($separador && $this->getPages()) {
449 //@TODO Agregar el separador por defecto.
450 //$this->contenido[] = $separador_defecto
452 $this->_contenido[] = $contenido;