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 {
35 * Tamanio de las paginas.
36 * @var string $tamanio
42 * Orientacion (portrait o landscape).
43 * @var sting $orientacion
46 var $orientacion = "portrait";
49 * Array de objetos MECON_PDF_Contenido
50 @ @var array $contenido
53 var $_contenido = array();
56 * Espacio dispobible en la pagina. Representa la coordenada Y a partir de
57 * la cual se puede comenzar a escribir el contenido.
58 * @var int $espacioDisponible
61 var $espacioDisponible;
72 * @var bool $paginador
75 var $paginador = true;
78 * Fecha. Si es true se pone la fecha del servidor, si es false no se pone
79 * nada, en caso contrario se pone lo que haya en esta variable.
87 * @var string $seccion
94 * @var string $subseccion
97 var $subseccion = 'Ministerio de Economia';
101 * @var string $string
108 * @var string $subtitulo
114 * Excepciones al encabezado
115 * @var array $excepciones
118 var $_excepciones = array ();
123 * @param string $tam Tamanio de las hojas.
124 * @param string $ori Orientacion de las hojaz (portrait o landscape).
129 function MECON_PDF_Marco($tam = "a4", $ori = "portrait") {
130 $this->MECON_PDF($tam);
131 $this->tamanio = $tam;
132 $this->orientacion = $ori;
133 $tmp = include 'MECON/PDF/Marco/medidas.php' ;
134 $tmp = $tmp[$tam][$ori];
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 bool $encabezado Indica si el encabezado debe ponerse en la
151 * @param string $seccion Seccion del encabezado para esta pagina nueva.
152 * @param string $subseccion SubSeccion del encabezado para esta pagina
158 function newPage($pagina = 'a4', $encabezado = true, $seccion = null, $subseccion =
161 parent::newPage($pagina);
163 $this->espacioDisponible = $this->_config['encabezado']['Yi'] - 27;
164 if ($this->countPages() === 1) {
165 if ($this->titulo || $this->subtitulo) {
166 $this->espacioDisponible -= 27;
169 if (!is_null($seccion)) {
170 $this->excepciones[$this->countPages()]['seccion'] = $seccion;
172 if (!is_null($subseccion)) {
173 $this->excepciones[$this->countPages()]['subseccion'] = $subseccion;
177 $this->espacioDisponible = $this->_config['encabezado']['Yf'];
178 $this->excepciones[$this->countPages()]['nova'] = true;
184 * Funcion que agrega el logo al encabezado de una pagina.
189 function _addLogo() {
190 $conf = $this->_config['encabezado'];
192 $this->addImage($this->logo, $conf['logo']['X'],
193 $conf['logo']['Y'], null, 'jpg', $this->orientacion);
198 * Funcion que agrega la seccion al encabezado de una pagina.
203 function _addSeccion() {
204 $conf = $this->_config['encabezado'];
205 if ($this->seccion) {
206 $tmp = $this->strlen($this->seccion, $conf['seccion']);
207 $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
209 $this->seccion = $this->wrapLine ($this->seccion, $tmp2,
211 $tmp = $this->strlen($this->seccion, $conf['seccion']);
213 $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi']
214 - $conf['linea1']['Xi'] - $tmp) / 2;
215 $this->addText($init, $conf['seccion']['Y'], $this->seccion,
216 $conf['seccion'], null, $this->orientacion);
221 * Funcion que agrega la subseccion al encabezado de una pagina.
226 function _addSubSeccion() {
227 $conf = $this->_config['encabezado'];
228 if ($this->subseccion) {
229 $tmp = $this->strlen($this->subseccion, $conf['subseccion']);
230 $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
232 $this->subseccion = $this->wrapLine ($this->subseccion, $tmp2,
233 $conf['subseccion']);
234 $tmp = $this->strlen($this->subseccion, $conf['subseccion']);
236 $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi']
237 - $conf['linea1']['Xi'] - $tmp) / 2;
238 $this->addText($init, $conf['subseccion']['Y'], $this->subseccion,
239 $conf['subseccion'], null, $this->orientacion);
244 * Funcion que agrega el paginador al encabezado de una pagina.
249 function _addPager() {
250 $conf = $this->_config['encabezado'];
251 if ($this->paginador) {
252 $txt = 'Pagina '.$this->numPage().' de '.
254 $tmp = $this->strlen($txt, $conf['paginador']);
255 $init = $conf['linea2']['Xi'] + ( $conf['Xf']
256 - $conf['linea2']['Xi'] - $tmp) / 2;
257 $this->addText($init, $conf['paginador']['Y'], $txt,
258 $conf['paginador'], null, $this->orientacion);
263 * Funcion que permite agregar la fecha al encabezado de una pagina.
268 function _addDate() {
269 $conf = $this->_config['encabezado'];
271 if (is_a($this->fecha, 'Date')) {
272 $this->fecha = $this->fecha->format("%d/%m/%Y");
274 elseif ($this->fecha === true) {
275 $this->fecha = date("d/m/Y");
277 $tmp = $this->strlen($this->fecha, $conf['fecha']);
278 $init = $conf['linea2']['Xi'] + ( $conf['Xf']
279 - $conf['linea2']['Xi'] - $tmp) / 2;
280 $this->addText($init, $conf['fecha']['Y'], $this->fecha,
281 $conf['fecha'], null, $this->orientacion);
286 * Funcion que arma el recuadro del encabezado de las paginas.
291 function _addHeaderRectangle() {
292 $conf = $this->_config['encabezado'];
294 $this->addRectangle ($conf['Xi'], $conf['Yi'], $conf['Xf'],
295 $conf['Yf'], '', null, $this->orientacion);
296 $this->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'],
297 $conf['linea1']['Xf'], $conf['linea1']['Yf'], '', null,
299 $this->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'],
300 $conf['linea2']['Xf'], $conf['linea2']['Yf'], '', null,
305 * Funcion que obtiene el ancho de la pagina
307 * @return ancho de la pagina
310 function getWidth() {
311 return parent::getWith($this->orientacion);
315 * Funcion que permite agregar el titulo a una pagina.
320 function _addTitle() {
321 $conf = $this->_config['titulo'];
323 $tmp = $this->strlen($this->titulo, $conf);
324 $tmp2 = $this->getWidth($this->orientacion);
326 $this->titulo = $this->wrapLine ($this->titulo, $tmp2,
328 $tmp = $this->strlen($this->titulo, $conf);
330 $init = ($tmp2 - $tmp) / 2;
331 $this->addText($init, $conf['Y'], $this->titulo,
332 $conf, null, $this->orientacion);
337 * Funcion que permite agregar el subtitulo a una pagina.
342 function _addSubTitle() {
343 $conf = $this->_config['subtitulo'];
344 if ($this->subtitulo) {
345 $tmp = $this->strlen($this->subtitulo, $conf);
346 $tmp2 = $this->getWidth($this->orientacion);
348 $this->subtitulo = $this->wrapLine ($this->subtitulo, $tmp2,
350 $tmp = $this->strlen($this->subtitulo, $conf);
352 $init = ($tmp2 - $tmp) / 2;
353 $this->addText($init, $conf['Y'], $this->subtitulo,
354 $conf, null, $this->orientacion);
359 * Funcion que agrega el encabezado a la pagina actual.
361 * @param bool $title Muetra o no el titulo.
362 * @param bool $subtitle Muestra o no el subtitulo.
367 function _buildHeader($title = true, $subtitle = true) {
369 $this->_addSeccion();
370 $this->_addSubseccion();
373 $this->_addHeaderRectangle();
378 $this->_addSubTitle();
383 * Funcion que agrega el contenido al PDF.
388 function _buildContent() {
389 if ($this->_contenido) {
390 foreach ($this->_contenido as $cont) {
392 //MECON_PDF_Marco se pasa por referencia para que se agregen las
393 //paginas a medida que se van necesitando. Esto permite que varie el
394 //tipo de contenido que se agrega.
400 * Funcion que se encarga de transformar la informacion para que se genere
403 * @return pdffile Archivo PDF.
407 $this->newPage($this->tamanio);
408 $this->_buildContent();
409 if ($this->getPages()) {
411 foreach ($this->getPages() as $page) {
412 $this->_pagina_actual = $page;
414 $sec = $this->seccion;
415 $subsec = $this->subseccion;
417 if (@$this->_excepciones[$this->numPage($page)]['seccion']) {
419 $this->_excepciones[$this->numPage($page)]['seccion'];
422 if (@$this->_excepciones[$this->numPage($page)]['subseccion']) {
424 $this->_excepciones[$this->numPage($page)]['subseccion'];
427 if (@!$this->_excepciones[$this->numPage($page)]['nova']) {
428 $this->_buildHeader($t, $t);
432 $this->seccion = $sec;
433 $this->subseccion = $subsec;
435 return parent::toPDF();
440 * Funcion que pemite agregar contenido al PDF.
442 * @param mixed $contenido Objeto contenido que se agrega.
443 * @param bool $separador Indicacion si hay que agregar un separador.
448 function addContent($contenido, $separador = true) {
449 if ($separador && $this->getPages()) {
450 //@TODO Agregar el separador por defecto.
451 //$this->contenido[] = $separador_defecto
453 $this->_contenido[] = $contenido;