1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
4 -------------------------------------------------------------------------------
5 This file is part of mlib.
7 mlib is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2 of the License, or (at your option)
12 mlib is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License; if not,
17 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18 Boston, MA 02111-1307 USA
19 -------------------------------------------------------------------------------
20 Creado: Fri Oct 24 16:34:11 2003
21 Autor: Martin Marrese <mmarre@mecon.gov.ar>
22 -------------------------------------------------------------------------------
24 -----------------------------------------------------------------------------*/
26 require_once 'MLIB/PDF.php';
27 require_once 'MLIB/PDF/Separador.php';
28 require_once 'MLIB/PDF/HeaderDefecto.php';
31 * Libreria que crea un marco estandar para los pdfs.
33 class MLIB_PDF_Marco extends MLIB_PDF {
36 * Objeto MLIB_PDF_Separador que se utilizara por defecto.
37 * @var Object $separador
40 var $_separador_defecto;
43 * Array de objetos MLIB_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 ();
115 * MLIB_PDF_Header. Objeto que hay que utilizar como enzabezado. Si hay
116 * algo aqui se desecha el encabezado por defecto.
117 * @var Object $header
125 * @param string $tam Tamanio de las hojas.
126 * @param string $ori Orientacion de las hojaz (portrait o landscape).
127 * @param string $nom Nombre del archivo.
132 function MLIB_PDF_Marco($tam = "a4", $ori = "portrait", $nom = 'Doc.pdf') {
133 $this->MLIB_PDF($tam, $ori, $nom);
134 $this->tamanio = $tam;
136 $this->_separador_defecto =& new MLIB_PDF_Separador();
140 * Funcion que setea los valores de conf para poder poner las cabeceras
142 * @param int $pagina numero del la pagina de la que debe setear loa
146 function _resetConf($pagina = null)
148 if(is_null($pagina));
149 $pagina = $this->numPage();
150 $tmp = include 'MLIB/PDF/Marco/medidas.php' ;
151 $tmp = $tmp[$this->tamanio][$this->getOrientation($pagina)];
152 $tmp['Xi'] = $this->_config['Xi'];
153 $tmp['Yi'] = $this->_config['Yi'];
154 $tmp['Xf'] = $this->_config['Xf'];
155 $tmp['Yf'] = $this->_config['Yf'];
156 $this->_config = $tmp;
160 * Permite agregar nuevas paginas al pdf que se esta armando.
162 * @param string $pagina Tipo de pagina que se va a utilizar.
163 * @param string $orientacion Orientacion de la hoja
164 * @param bool $encabezado Indica si el encabezado debe ponerse en la
166 * @param string $seccion Seccion del encabezado para esta pagina nueva.
167 * @param string $subseccion SubSeccion del encabezado para esta pagina
173 function newPage($pagina = 'a4', $orientacion = null, $encabezado = true,
174 $seccion = null, $subseccion = null) {
175 parent::newPage($pagina, $orientacion);
178 $this->espacioDisponible = $this->header->getAltura() - 27;
179 if ($this->countPages() === 1) {
180 if ($this->titulo || $this->subtitulo) {
181 $this->espacioDisponible -= 27;
184 if (!is_null($seccion)) {
185 $this->_excepciones[$this->numPage()]['seccion'] = $seccion;
187 if (!is_null($subseccion)) {
188 $this->_excepciones[$this->numPage()]['subseccion'] = $subseccion;
192 $this->espacioDisponible = $this->_config['Yf'];
193 $this->_excepciones[$this->countPages()]['nova'] = true;
199 * Funcion que permite agregar el titulo a una pagina.
204 function _addTitle() {
206 $conf = $this->_config['titulo'];
208 $tmp = $this->strlen($this->titulo, $conf);
209 $tmp2 = $this->getWidth();
211 $this->titulo = $this->wrapLine ($this->titulo, $tmp2,
213 $tmp = $this->strlen($this->titulo, $conf);
215 $init = ($tmp2 - $tmp) / 2;
216 $this->addText($init, $conf['Y'], $this->titulo,
222 * Funcion que permite agregar el subtitulo a una pagina.
227 function _addSubTitle() {
229 $conf = $this->_config['subtitulo'];
230 if ($this->subtitulo) {
231 $tmp = $this->strlen($this->subtitulo, $conf);
232 $tmp2 = $this->getWidth();
234 $this->subtitulo = $this->wrapLine ($this->subtitulo, $tmp2,
236 $tmp = $this->strlen($this->subtitulo, $conf);
238 $init = ($tmp2 - $tmp) / 2;
239 $this->addText($init, $conf['Y'], $this->subtitulo,
245 * Funcion que agrega el encabezado a la pagina actual.
247 * @param bool $title Muetra o no el titulo.
248 * @param bool $subtitle Muestra o no el subtitulo.
253 function _buildHeader($title = true, $subtitle = true) {
255 $this->header->toPdf($this);
260 $this->_addSubTitle();
265 * Funcion que crea el Header por defecto.
270 function _crearHeaderDefecto() {
271 $this->header =& new MLIB_PDF_HeaderDefecto($this->tamanio,
272 $this->getOrientation($this->numPage()));
274 $this->header->logo = $this->logo;
276 $this->header->seccion = $this->seccion;
277 $this->header->subseccion = $this->subseccion;
278 $this->header->paginador = $this->paginador;
279 $this->header->fecha = $this->fecha;
283 * Funcion que agrega el contenido al PDF.
288 function _buildContent() {
290 if ($this->_contenido) {
291 foreach ($this->_contenido as $cont) {
293 //MLIB_PDF_Marco se pasa por referencia para que se agregen las
294 //paginas a medida que se van necesitando. Esto permite que varie el
295 //tipo de contenido que se agrega.
301 * Funcion que se encarga de transformar la informacion para que se genere
304 * @return pdffile Archivo PDF.
308 //Veo si hay que utilizar o no el header por defecto.
309 if (!$this->header) {
310 $this->_crearHeaderDefecto();
313 $this->_buildContent();
314 if ($this->getPages()) {
316 foreach ($this->getPages() as $page) {
317 $this->_pagina_actual = $page;
319 $sec = $this->header->seccion;
320 $subsec = $this->header->subseccion;
322 if (@$this->_excepciones[$this->numPage($page)]['seccion']) {
323 $this->header->seccion =
324 $this->_excepciones[$this->numPage($page)]['seccion'];
327 if (@$this->_excepciones[$this->numPage($page)]['subseccion']) {
328 $this->header->subseccion =
329 $this->_excepciones[$this->numPage($page)]['subseccion'];
332 if (@!$this->_excepciones[$this->numPage($page)]['nova']) {
333 $this->_buildHeader($t, $t);
335 //Solo agrego el titulo y subtitulo en la primer hoja
338 $this->header->seccion = $sec;
339 $this->header->subseccion = $subsec;
341 return parent::toPDF();
346 * Funcion que pemite agregar contenido al PDF.
348 * @param mixed $contenido Objeto contenido que se agrega.
349 * @param bool $separador Indicacion si hay que agregar un separador.
354 function addContent($contenido, $separador = true) {
355 //Me aseguro de poner el separador siempre y cuando no sea el primer
356 //objeto de la primer pagina.
357 if ($separador && $this->_contenido) {
358 $this->_contenido[] = $this->_separador_defecto;
360 $this->_contenido[] = $contenido;