1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
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';
28 require_once 'MECON/PDF/Separador.php';
31 * Libreria que crea un marco estandar para los pdfs.
33 class MECON_PDF_Marco extends MECON_PDF {
36 * Objeto MECON_PDF_Separador que se utilizara por defecto.
37 * @var Object $separador
40 var $_separador_defecto;
43 * Array de objetos MECON_PDF_Contenido
44 * @var array $contenido
47 var $_contenido = array();
50 * Espacio dispobible en la pagina. Representa la coordenada Y a partir de
51 * la cual se puede comenzar a escribir el contenido.
52 * @var int $espacioDisponible
55 var $espacioDisponible;
66 * @var bool $paginador
69 var $paginador = true;
72 * Fecha. Si es true se pone la fecha del servidor, si es false no se pone
73 * nada, en caso contrario se pone lo que haya en esta variable.
81 * @var string $seccion
88 * @var string $subseccion
91 var $subseccion = 'Ministerio de Economia';
102 * @var string $subtitulo
108 * Excepciones al encabezado
109 * @var array $excepciones
112 var $_excepciones = array ();
117 * @param string $tam Tamanio de las hojas.
118 * @param string $ori Orientacion de las hojaz (portrait o landscape).
119 * @param string $nom Nombre del archivo.
124 function MECON_PDF_Marco($tam = "a4", $ori = "portrait", $nom = 'Doc.pdf') {
125 $this->MECON_PDF($tam, $ori, $nom);
126 $this->tamanio = $tam;
128 $this->_separador_defecto =& new MECON_PDF_Separador();
132 * Funcion que setea los valores de conf para poder poner las cabeceras
134 * @param int $pagina numero del la pagina de la que debe setear loa
138 function _resetConf($pagina = null)
140 if(is_null($pagina));
141 $pagina = $this->numPage();
142 $tmp = include 'MECON/PDF/Marco/medidas.php' ;
143 $tmp = $tmp[$this->tamanio][$this->getOrientation($pagina)];
144 $tmp['Xi'] = $this->_config['Xi'];
145 $tmp['Yi'] = $this->_config['Yi'];
146 $tmp['Xf'] = $this->_config['Xf'];
147 $tmp['Yf'] = $this->_config['Yf'];
148 $this->_config = $tmp;
149 if (@$this->_config['encabezado']['logo']['path']) {
150 $this->logo = $this->_config['encabezado']['logo']['path'];
155 * Permite agregar nuevas paginas al pdf que se esta armando.
157 * @param string $pagina Tipo de pagina que se va a utilizar.
158 * @param string $orientacion Orientacion de la hoja
159 * @param bool $encabezado Indica si el encabezado debe ponerse en la
161 * @param string $seccion Seccion del encabezado para esta pagina nueva.
162 * @param string $subseccion SubSeccion del encabezado para esta pagina
168 function newPage($pagina = 'a4', $orientacion = null, $encabezado = true, $seccion = null, $subseccion =
171 parent::newPage($pagina, $orientacion);
174 $this->espacioDisponible = $this->_config['encabezado']['Yi'] - 27;
175 if ($this->countPages() === 1) {
176 if ($this->titulo || $this->subtitulo) {
177 $this->espacioDisponible -= 27;
180 if (!is_null($seccion)) {
181 $this->_excepciones[$this->numPage()]['seccion'] = $seccion;
183 if (!is_null($subseccion)) {
184 $this->_excepciones[$this->numPage()]['subseccion'] = $subseccion;
188 $this->espacioDisponible = $this->_config['encabezado']['Yf'];
189 $this->_excepciones[$this->countPages()]['nova'] = true;
195 * Funcion que agrega el logo al encabezado de una pagina.
200 function _addLogo() {
202 $conf = $this->_config['encabezado'];
204 $this->addImage($this->logo, $conf['logo']['X'],
205 $conf['logo']['Y'], null, 'jpg');
210 * Funcion que agrega la seccion al encabezado de una pagina.
215 function _addSeccion() {
217 $conf = $this->_config['encabezado'];
218 if ($this->seccion) {
219 $tmp = $this->strlen($this->seccion, $conf['seccion']);
220 $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
222 $this->seccion = $this->wrapLine ($this->seccion, $tmp2,
224 $tmp = $this->strlen($this->seccion, $conf['seccion']);
226 $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi']
227 - $conf['linea1']['Xi'] - $tmp) / 2;
228 $this->addText($init, $conf['seccion']['Y'], $this->seccion,
234 * Funcion que agrega la subseccion al encabezado de una pagina.
239 function _addSubSeccion() {
241 $conf = $this->_config['encabezado'];
242 if ($this->subseccion) {
243 $tmp = $this->strlen($this->subseccion, $conf['subseccion']);
244 $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
246 $this->subseccion = $this->wrapLine ($this->subseccion, $tmp2,
247 $conf['subseccion']);
248 $tmp = $this->strlen($this->subseccion, $conf['subseccion']);
250 $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi']
251 - $conf['linea1']['Xi'] - $tmp) / 2;
252 $this->addText($init, $conf['subseccion']['Y'], $this->subseccion,
253 $conf['subseccion']);
258 * Funcion que agrega el paginador al encabezado de una pagina.
263 function _addPager() {
265 $conf = $this->_config['encabezado'];
266 if ($this->paginador) {
267 $txt = 'Página '.$this->numPage().' de '.
269 $tmp = $this->strlen($txt, $conf['paginador']);
270 $init = $conf['linea2']['Xi'] + ( $conf['Xf']
271 - $conf['linea2']['Xi'] - $tmp) / 2;
272 $this->addText($init, $conf['paginador']['Y'], $txt,
278 * Funcion que permite agregar la fecha al encabezado de una pagina.
283 function _addDate() {
285 $conf = $this->_config['encabezado'];
287 if (is_a($this->fecha, 'Date')) {
288 $this->fecha = $this->fecha->format("%d/%m/%Y");
290 elseif ($this->fecha === true) {
291 $this->fecha = date("d/m/Y");
293 $tmp = $this->strlen($this->fecha, $conf['fecha']);
294 $init = $conf['linea2']['Xi'] + ( $conf['Xf']
295 - $conf['linea2']['Xi'] - $tmp) / 2;
296 $this->addText($init, $conf['fecha']['Y'], $this->fecha,
302 * Funcion que arma el recuadro del encabezado de las paginas.
307 function _addHeaderRectangle() {
309 $conf = $this->_config['encabezado'];
311 $this->addRectangle ($conf['Xi'], $conf['Yi'], $conf['Xf'],
313 $this->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'],
314 $conf['linea1']['Xf'], $conf['linea1']['Yf'], '');
315 $this->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'],
316 $conf['linea2']['Xf'], $conf['linea2']['Yf'], '');
320 * Funcion que permite agregar el titulo a una pagina.
325 function _addTitle() {
327 $conf = $this->_config['titulo'];
329 $tmp = $this->strlen($this->titulo, $conf);
330 $tmp2 = $this->getWidth();
332 $this->titulo = $this->wrapLine ($this->titulo, $tmp2,
334 $tmp = $this->strlen($this->titulo, $conf);
336 $init = ($tmp2 - $tmp) / 2;
337 $this->addText($init, $conf['Y'], $this->titulo,
343 * Funcion que permite agregar el subtitulo a una pagina.
348 function _addSubTitle() {
350 $conf = $this->_config['subtitulo'];
351 if ($this->subtitulo) {
352 $tmp = $this->strlen($this->subtitulo, $conf);
353 $tmp2 = $this->getWidth();
355 $this->subtitulo = $this->wrapLine ($this->subtitulo, $tmp2,
357 $tmp = $this->strlen($this->subtitulo, $conf);
359 $init = ($tmp2 - $tmp) / 2;
360 $this->addText($init, $conf['Y'], $this->subtitulo,
366 * Funcion que agrega el encabezado a la pagina actual.
368 * @param bool $title Muetra o no el titulo.
369 * @param bool $subtitle Muestra o no el subtitulo.
374 function _buildHeader($title = true, $subtitle = true) {
377 $this->_addSeccion();
378 $this->_addSubseccion();
381 $this->_addHeaderRectangle();
386 $this->_addSubTitle();
391 * Funcion que agrega el contenido al PDF.
396 function _buildContent() {
398 if ($this->_contenido) {
399 foreach ($this->_contenido as $cont) {
401 //MECON_PDF_Marco se pasa por referencia para que se agregen las
402 //paginas a medida que se van necesitando. Esto permite que varie el
403 //tipo de contenido que se agrega.
409 * Funcion que se encarga de transformar la informacion para que se genere
412 * @return pdffile Archivo PDF.
416 $this->_buildContent();
417 if ($this->getPages()) {
419 foreach ($this->getPages() as $page) {
420 $this->_pagina_actual = $page;
422 $sec = $this->seccion;
423 $subsec = $this->subseccion;
425 if (@$this->_excepciones[$this->numPage($page)]['seccion']) {
427 $this->_excepciones[$this->numPage($page)]['seccion'];
430 if (@$this->_excepciones[$this->numPage($page)]['subseccion']) {
432 $this->_excepciones[$this->numPage($page)]['subseccion'];
435 if (@!$this->_excepciones[$this->numPage($page)]['nova']) {
436 $this->_buildHeader($t, $t);
440 $this->seccion = $sec;
441 $this->subseccion = $subsec;
443 return parent::toPDF();
448 * Funcion que pemite agregar contenido al PDF.
450 * @param mixed $contenido Objeto contenido que se agrega.
451 * @param bool $separador Indicacion si hay que agregar un separador.
456 function addContent($contenido, $separador = true) {
457 //Me aseguro de poner el separador siempre y cuando no sea el primer
458 //objeto de la primer pagina.
459 if ($separador && $this->_contenido) {
460 $this->_contenido[] = $this->_separador_defecto;
462 $this->_contenido[] = $contenido;