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';
28 require_once 'MECON/HTML/Tabla.php';
31 * Libreria que crea un marco estandar para los pdfs.
33 class MECON_PDF_Marco extends MECON_HTML_Tabla {
37 * @var Object MECON_PDF
43 * Archivo de configuracion de medidas
47 var $_config = array ();
50 * Tamanio de las paginas.
51 * @var string $tamanio
57 * Orientacion (portrait o landscape).
58 * @var sting $orientacion
61 var $_orientacion = "portrait";
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
116 * @param string $tam Tamanio de las hojas.
117 * @param string $ori Orientacion de las hojaz (portrait o landscape).
122 function MECON_PDF_Marco($tam = "a4", $ori = "portrait") {
123 $this->_pdf =& new MECON_PDF($tam);
124 $this->_tamanio = $tam;
125 $this->_orientacion = $ori;
126 $this->_config = include 'MECON/PDF/Marco/medidas.php' ;
127 $this->_config = $this->_config[$tam][$ori];
128 if (@$this->_config['encabezado']['logo']['path']) {
129 $this->logo = $this->_config['encabezado']['logo']['path'];
131 $this->_config['Xi'] = $this->_pdf->config['Xi'];
132 $this->_config['Yi'] = $this->_pdf->config['Yi'];
133 $this->_config['Xf'] = $this->_pdf->config['Xf'];
134 $this->_config['Yf'] = $this->_pdf->config['Yf'];
135 $this->MECON_HTML_Tabla();
139 * Funcion que agrega el logo al encabezado de una pagina.
144 function _addLogo() {
145 $conf = $this->_config['encabezado'];
147 $this->_pdf->addImage($this->logo, $conf['logo']['X'],
148 $conf['logo']['Y'], null, 'jpg', $this->_orientacion);
153 * Funcion que agrega la seccion al encabezado de una pagina.
158 function _addSeccion() {
159 $conf = $this->_config['encabezado'];
160 if ($this->seccion) {
161 $tmp = $this->_pdf->strlen($this->seccion, $conf['seccion']);
162 $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
164 $this->seccion = $this->_pdf->wrapLine ($this->seccion, $tmp2,
166 $tmp = $this->_pdf->strlen($this->seccion, $conf['seccion']);
168 $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi']
169 - $conf['linea1']['Xi'] - $tmp) / 2;
170 $this->_pdf->addText($init, $conf['seccion']['Y'], $this->seccion,
171 $conf['seccion'], null, $this->_orientacion);
176 * Funcion que agrega la subseccion al encabezado de una pagina.
181 function _addSubSeccion() {
182 $conf = $this->_config['encabezado'];
183 if ($this->subseccion) {
184 $tmp = $this->_pdf->strlen($this->subseccion, $conf['subseccion']);
185 $tmp2 = $conf['linea2']['Xi'] - $conf['linea1']['Xi'];
187 $this->subseccion = $this->_pdf->wrapLine ($this->subseccion, $tmp2,
188 $conf['subseccion']);
189 $tmp = $this->_pdf->strlen($this->subseccion, $conf['subseccion']);
191 $init = $conf['linea1']['Xi'] + ( $conf['linea2']['Xi']
192 - $conf['linea1']['Xi'] - $tmp) / 2;
193 $this->_pdf->addText($init, $conf['subseccion']['Y'], $this->subseccion,
194 $conf['subseccion'], null, $this->_orientacion);
199 * Funcion que agrega el paginador al encabezado de una pagina.
204 function _addPager() {
205 $conf = $this->_config['encabezado'];
206 if ($this->paginador) {
207 $txt = 'Pagina '.$this->_pdf->numPage().' de '.
208 $this->_pdf->countPages();
209 $tmp = $this->_pdf->strlen($txt, $conf['paginador']);
210 $init = $conf['linea2']['Xi'] + ( $conf['Xf']
211 - $conf['linea2']['Xi'] - $tmp) / 2;
212 $this->_pdf->addText($init, $conf['paginador']['Y'], $txt,
213 $conf['paginador'], null, $this->_orientacion);
218 * Funcion que permite agregar la fecha al encabezado de una pagina.
223 function _addDate() {
224 $conf = $this->_config['encabezado'];
226 if ($this->fecha === true) {
227 $this->fecha = date("d/m/Y");
229 $tmp = $this->_pdf->strlen($this->fecha, $conf['fecha']);
230 $init = $conf['linea2']['Xi'] + ( $conf['Xf']
231 - $conf['linea2']['Xi'] - $tmp) / 2;
232 $this->_pdf->addText($init, $conf['fecha']['Y'], $this->fecha,
233 $conf['fecha'], null, $this->_orientacion);
238 * Funcion que arma el recuadro del encabezado de las paginas.
243 function _addHeaderRectangle() {
244 $conf = $this->_config['encabezado'];
246 $this->_pdf->addRectangle ($conf['Xi'], $conf['Yi'], $conf['Xf'],
247 $conf['Yf'], '', null, $this->_orientacion);
248 $this->_pdf->addLine($conf['linea1']['Xi'], $conf['linea1']['Yi'],
249 $conf['linea1']['Xf'], $conf['linea1']['Yf'], '', null,
250 $this->_orientacion);
251 $this->_pdf->addLine($conf['linea2']['Xi'], $conf['linea2']['Yi'],
252 $conf['linea2']['Xf'], $conf['linea2']['Yf'], '', null,
253 $this->_orientacion);
257 * Funcion que permite agregar el titulo a una pagina.
262 function _addTitle() {
263 $conf = $this->_config['titulo'];
265 $tmp = $this->_pdf->strlen($this->titulo, $conf);
266 $tmp2 = $this->_pdf->getWidth($this->_orientacion);
268 $this->titulo = $this->_pdf->wrapLine ($this->titulo, $tmp2,
270 $tmp = $this->_pdf->strlen($this->titulo, $conf);
272 $init = ($tmp2 - $tmp) / 2;
273 $this->_pdf->addText($init, $conf['Y'], $this->titulo,
274 $conf, null, $this->_orientacion);
279 * Funcion que permite agregar el subtitulo a una pagina.
284 function _addSubTitle() {
285 $conf = $this->_config['subtitulo'];
286 if ($this->subtitulo) {
287 $tmp = $this->_pdf->strlen($this->subtitulo, $conf);
288 $tmp2 = $this->_pdf->getWidth($this->_orientacion);
290 $this->subtitulo = $this->_pdf->wrapLine ($this->subtitulo, $tmp2,
292 $tmp = $this->_pdf->strlen($this->subtitulo, $conf);
294 $init = ($tmp2 - $tmp) / 2;
295 $this->_pdf->addText($init, $conf['Y'], $this->subtitulo,
296 $conf, null, $this->_orientacion);
301 * Funcion que agrega la informacion del marco a la pagina actual.
303 * @param bool $title Muetra o no el titulo.
304 * @param bool $subtitle Muestra o no el subtitulo.
309 function buildPage($title = true, $subtitle = true) {
311 $this->_addSeccion();
312 $this->_addSubseccion();
315 $this->_addHeaderRectangle();
320 $this->_addSubTitle();
325 * Funcion que devuelve el espacio dispobible en una pagina.
327 * @param int $pagina Numero de pagina.
332 function _getAvailableSpace($pagina) {
333 if ($pagina === 1 && $this->titulo && $this->subtitulo) {
334 return $this->_config['contenido']['Y'];
337 return $this->_config['titulo']['Y'];