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';
29 require_once 'MECON/PDF/HeaderDefecto.php';
32 * Libreria que crea un marco estandar para los pdfs.
34 class MECON_PDF_Marco extends MECON_PDF {
37 * Objeto MECON_PDF_Separador que se utilizara por defecto.
38 * @var Object $separador
41 var $_separador_defecto;
44 * Array de objetos MECON_PDF_Contenido
45 * @var array $contenido
48 var $_contenido = array();
51 * Espacio dispobible en la pagina. Representa la coordenada Y a partir de
52 * la cual se puede comenzar a escribir el contenido.
53 * @var int $espacioDisponible
56 var $espacioDisponible;
67 * @var bool $paginador
70 var $paginador = true;
73 * Fecha. Si es true se pone la fecha del servidor, si es false no se pone
74 * nada, en caso contrario se pone lo que haya en esta variable.
82 * @var string $seccion
89 * @var string $subseccion
92 var $subseccion = 'Ministerio de Economia';
103 * @var string $subtitulo
109 * Excepciones al encabezado
110 * @var array $excepciones
113 var $_excepciones = array ();
116 * MECON_PDF_Header. Objeto que hay que utilizar como enzabezado. Si hay
117 * algo aqui se desecha el encabezado por defecto.
118 * @var Object $header
126 * @param string $tam Tamanio de las hojas.
127 * @param string $ori Orientacion de las hojaz (portrait o landscape).
128 * @param string $nom Nombre del archivo.
133 function MECON_PDF_Marco($tam = "a4", $ori = "portrait", $nom = 'Doc.pdf') {
134 $this->MECON_PDF($tam, $ori, $nom);
135 $this->tamanio = $tam;
137 $this->_separador_defecto =& new MECON_PDF_Separador();
141 * Funcion que setea los valores de conf para poder poner las cabeceras
143 * @param int $pagina numero del la pagina de la que debe setear loa
147 function _resetConf($pagina = null)
149 if(is_null($pagina));
150 $pagina = $this->numPage();
151 $tmp = include 'MECON/PDF/Marco/medidas.php' ;
152 $tmp = $tmp[$this->tamanio][$this->getOrientation($pagina)];
153 $tmp['Xi'] = $this->_config['Xi'];
154 $tmp['Yi'] = $this->_config['Yi'];
155 $tmp['Xf'] = $this->_config['Xf'];
156 $tmp['Yf'] = $this->_config['Yf'];
157 $this->_config = $tmp;
161 * Permite agregar nuevas paginas al pdf que se esta armando.
163 * @param string $pagina Tipo de pagina que se va a utilizar.
164 * @param string $orientacion Orientacion de la hoja
165 * @param bool $encabezado Indica si el encabezado debe ponerse en la
167 * @param string $seccion Seccion del encabezado para esta pagina nueva.
168 * @param string $subseccion SubSeccion del encabezado para esta pagina
174 function newPage($pagina = 'a4', $orientacion = null, $encabezado = true,
175 $seccion = null, $subseccion = null) {
176 parent::newPage($pagina, $orientacion);
179 $this->espacioDisponible = $this->header->getAltura() - 27;
180 if ($this->countPages() === 1) {
181 if ($this->titulo || $this->subtitulo) {
182 $this->espacioDisponible -= 27;
185 if (!is_null($seccion)) {
186 $this->_excepciones[$this->numPage()]['seccion'] = $seccion;
188 if (!is_null($subseccion)) {
189 $this->_excepciones[$this->numPage()]['subseccion'] = $subseccion;
193 $this->espacioDisponible = $this->_config['Yf'];
194 $this->_excepciones[$this->countPages()]['nova'] = true;
200 * Funcion que permite agregar el titulo a una pagina.
205 function _addTitle() {
207 $conf = $this->_config['titulo'];
209 $tmp = $this->strlen($this->titulo, $conf);
210 $tmp2 = $this->getWidth();
212 $this->titulo = $this->wrapLine ($this->titulo, $tmp2,
214 $tmp = $this->strlen($this->titulo, $conf);
216 $init = ($tmp2 - $tmp) / 2;
217 $this->addText($init, $conf['Y'], $this->titulo,
223 * Funcion que permite agregar el subtitulo a una pagina.
228 function _addSubTitle() {
230 $conf = $this->_config['subtitulo'];
231 if ($this->subtitulo) {
232 $tmp = $this->strlen($this->subtitulo, $conf);
233 $tmp2 = $this->getWidth();
235 $this->subtitulo = $this->wrapLine ($this->subtitulo, $tmp2,
237 $tmp = $this->strlen($this->subtitulo, $conf);
239 $init = ($tmp2 - $tmp) / 2;
240 $this->addText($init, $conf['Y'], $this->subtitulo,
246 * Funcion que agrega el encabezado a la pagina actual.
248 * @param bool $title Muetra o no el titulo.
249 * @param bool $subtitle Muestra o no el subtitulo.
254 function _buildHeader($title = true, $subtitle = true) {
256 $this->header->toPdf($this);
261 $this->_addSubTitle();
266 * Funcion que crea el Header por defecto.
271 function _crearHeaderDefecto() {
272 $this->header =& new MECON_PDF_HeaderDefecto($this->tamanio,
273 $this->getOrientation($this->numPage()));
275 $this->header->logo = $this->logo;
277 $this->header->seccion = $this->seccion;
278 $this->header->subseccion = $this->subseccion;
279 $this->header->paginador = $this->paginador;
280 $this->header->fecha = $this->fecha;
284 * Funcion que agrega el contenido al PDF.
289 function _buildContent() {
291 if ($this->_contenido) {
292 foreach ($this->_contenido as $cont) {
294 //MECON_PDF_Marco se pasa por referencia para que se agregen las
295 //paginas a medida que se van necesitando. Esto permite que varie el
296 //tipo de contenido que se agrega.
302 * Funcion que se encarga de transformar la informacion para que se genere
305 * @return pdffile Archivo PDF.
309 //Veo si hay que utilizar o no el header por defecto.
310 if (!$this->header) {
311 $this->_crearHeaderDefecto();
314 $this->_buildContent();
315 if ($this->getPages()) {
317 foreach ($this->getPages() as $page) {
318 $this->_pagina_actual = $page;
320 $sec = $this->header->seccion;
321 $subsec = $this->header->subseccion;
323 if (@$this->_excepciones[$this->numPage($page)]['seccion']) {
324 $this->header->seccion =
325 $this->_excepciones[$this->numPage($page)]['seccion'];
328 if (@$this->_excepciones[$this->numPage($page)]['subseccion']) {
329 $this->header->subseccion =
330 $this->_excepciones[$this->numPage($page)]['subseccion'];
333 if (@!$this->_excepciones[$this->numPage($page)]['nova']) {
334 $this->_buildHeader($t, $t);
336 //Solo agrego el titulo y subtitulo en la primer hoja
339 $this->header->seccion = $sec;
340 $this->header->subseccion = $subsec;
342 return parent::toPDF();
347 * Funcion que pemite agregar contenido al PDF.
349 * @param mixed $contenido Objeto contenido que se agrega.
350 * @param bool $separador Indicacion si hay que agregar un separador.
355 function addContent($contenido, $separador = true) {
356 //Me aseguro de poner el separador siempre y cuando no sea el primer
357 //objeto de la primer pagina.
358 if ($separador && $this->_contenido) {
359 $this->_contenido[] = $this->_separador_defecto;
361 $this->_contenido[] = $contenido;