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:12:31 2003
22 Autor: Gonzalo Merayo <gmeray@mecon.gov.ar>
23 -------------------------------------------------------------------------------
25 -----------------------------------------------------------------------------*/
27 require_once 'MECON/PDF/external/phppdflib.class.php';
30 * Liberia base para el manejo de pdf's.
35 * Orientacion (portrait o landscape).
36 * @var sting $orientacion
39 var $orientacion = "portrait";
43 * Orientacion cambiada, indica la orientacion de la pagina cuando es
45 * @var array $orientacion_distinta
48 var $_orientacion_distinta = array();
55 var $_config = array ();
65 * Identificacion de la pagina actual
66 * @var int $pagina_actual
76 var $_paginas = array();
79 * Nombre del archivo resultado para el display.
88 * @param string $tam Tipo de hoja
89 * @param string $ori Orientacion de las hojas (portrait o landscape).
90 * @param string $nombre Nombre del archivo PDF.
95 function MECON_PDF($tam = "a4", $ori = "portrait", $nombre = "Doc.pdf")
97 setlocale (LC_ALL, 'en_US');
98 $this->orientacion = $ori;
99 $this->_pdf = new pdffile;
100 $this->_config = include 'MECON/PDF/medidas.php';
101 $this->_config = $this->_config[$tam];
102 $this->_nombre = $nombre;
106 * Permite agregar nuevas paginas al pdf que se esta armando.
108 * @param string $pagina Tipo de pagina que se va a utilizar.
109 * @param string $orientacion Orientacion de la pagina en particular.
114 function newPage($pagina = "a4", $orientacion = null)
116 $this->_pagina_actual = $this->_pdf->new_page($pagina);
117 $this->_paginas[] = $this->_pagina_actual;
118 if(!is_null($orientacion) && $orientacion != $this->orientacion)
119 $this->_orientacion_distinta[$this->numPage()] = $orientacion;
123 * Funcion que retorna la orientacion de la pagina indicada.
124 * Si no se indica, toma la orientacion de la ultima pagina.
126 * @param int $pagina Numero de la pagina.
131 function getOrientation($pagina = null)
134 $pagina = $this->numPage();
136 if(isset($this->_orientacion_distinta[$pagina]))
137 return $this->_orientacion_distinta[$pagina];
139 return $this->orientacion;
143 * Funcion que genera el archivo y prepara los headers para que se envie.
150 header("Content-Disposition: filename=".$this->_nombre);
151 header("Content-Type: application/pdf");
152 $temp = $this->toPDF();
153 header('Content-Length: ' . strlen($temp));
158 * Funcion que devuelve el PDF.
164 return $this->_pdf->generate();
168 * Funcion que permite agregar texto a una pagina.
172 * @param string $texto $texto
173 * @param int $estilo $estilo
174 * @param int $pag Numero de pagina virtual.
175 * @param string $transformacion Indica la orientacion de la pagina.
180 function addText($X, $Y, $texto, $estilo = '', $pag = null, $transformacion
184 if(is_null($transformacion))
185 $transformacion = $this->getOrientation($pag);
186 switch (strtolower($transformacion)) {
188 $X = $this->_portraitX($x,$y);
189 $Y = $this->_portraitY($x,$y);
192 $X = $this->_landscapeX($x,$y);
193 $Y = $this->_landscapeY($x,$y);
194 @$estilo['rotation'] += 90;
197 $this->_pdf->draw_text($X, $Y, $texto, $this->refPage($pag), $estilo);
201 * Funcion que permite agregar un rectangulo a una pagina.
207 * @param long $estilo $estilo
208 * @param int $pag Numero de pagina virtual.
209 * @param string $transformacion Indica la orientacion de la pagina.
214 function addRectangle($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null,
215 $transformacion = null)
221 if(is_null($transformacion))
222 $transformacion = $this->getOrientation($pag);
223 switch (strtolower($transformacion)) {
225 $Xi = $this->_portraitX($xi,$yi);
226 $Yi = $this->_portraitY($xi,$yi);
227 $Xf = $this->_portraitX($xf,$yf);
228 $Yf = $this->_portraitY($xf,$yf);
231 $Xi = $this->_landscapeX($xi,$yi);
232 $Yi = $this->_landscapeY($xi,$yi);
233 $Xf = $this->_landscapeX($xf,$yf);
234 $Yf = $this->_landscapeY($xf,$yf);
237 $this->_pdf->draw_rectangle($Yi, $Xi, $Yf, $Xf, $this->refPage($pag), $estilo);
241 * Funcion que permite agregar una linea a una pagina.
247 * @param int $estilo $estilo
248 * @param int $pag Numero de pagina virtual.
249 * @param string $transformacion Indica la orientacion de la pagina.
254 function addLine($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null,
255 $transformacion = null)
261 if(is_null($transformacion))
262 $transformacion = $this->getOrientation($pag);
263 switch (strtolower($transformacion)) {
265 $Xi = $this->_portraitX($xi,$yi);
266 $Yi = $this->_portraitY($xi,$yi);
267 $Xf = $this->_portraitX($xf,$yf);
268 $Yf = $this->_portraitY($xf,$yf);
271 $Xi = $this->_landscapeX($xi,$yi);
272 $Yi = $this->_landscapeY($xi,$yi);
273 $Xf = $this->_landscapeX($xf,$yf);
274 $Yf = $this->_landscapeY($xf,$yf);
277 $this->_pdf->draw_line(array($Xi,$Xf),array($Yi,$Yf),
278 $this->refPage($pag),$estilo);
282 * Funcion que permite agregar una imagen JPG a una pagina.
284 * @param string $archivo Path completo del archivo imagen.
285 * @param int $X Posicion Horizontal.
286 * @param int $Y Posixion vertical.
287 * @param int $pag Numero de pagina virtual.
288 * @param string $formato Formato del archivo (Extension).
289 * @param string $transformacion Indica la orientacion de la pagina.
294 function addImage($archivo, $X, $Y, $pag = null, $formato = null,
295 $transformacion = null) {
298 if(is_null($transformacion))
299 $transformacion = $this->getOrientation($pag);
300 switch (strtolower($transformacion)) {
302 $X = $this->_portraitX($x,$y);
303 $Y = $this->_portraitY($x,$y);
306 $X = $this->_landscapeX($x,$y);
307 $Y = $this->_landscapeY($x,$y);
310 $formato = strtolower($formato);
313 $fh = fopen($archivo, "r");
314 $filedata = fread($fh, filesize($archivo));
316 $image = $this->_pdf->jfif_embed($filedata);
317 $this->_pdf->image_place($image, $Y, $X,
318 $this->refPage($pag));
324 * Funcion que wrappea una linea.
326 * @param strgin $texto Texto que quiere wrappearse.
327 * @param int $l_max Largo maximo del texto.
328 * @param array $attr Atributos del texto.
333 function wrapLine($texto, $l_max, $attr) {
334 //El if lo estoy haciendo porque en la funcion wordwrap de la libreria
335 //externa no tienen en cuenta que te pueden pasar un texto vacio a
336 //wrapear -> Amerita un mail a los autores.
338 return $this->_pdf->wrap_line ($texto, $l_max, $attr);
346 * Funcion que wrappea una linea.
348 * @param strgin $texto Texto que quiere wrappearse.
349 * @param int $l_max Largo maximo del texto.
350 * @param array $attr Atributos del texto.
355 function wordWrap($texto, $l_max, $attr) {
356 //El if lo estoy haciendo porque en la funcion wordwrap de la libreria
357 //externa no tienen en cuenta que te pueden pasar un texto vacio a
358 //wrapear -> Amerita un mail a los autores.
360 return $this->_pdf->word_wrap ($texto, $l_max, $attr);
368 * Funcion que calcula cuanto va a ocupar cierto texto segun su formato en
371 * @param strgin $texto Texto que quiere medirse.
372 * @param array $attr Atributos del texto.
377 function strlen($texto, $attr = '') {
378 return $this->_pdf->strlen($texto, $attr);
382 * Funcion que devuelve la cantidad de paginas que contiene el documento.
387 function countPages() {
388 return count($this->_paginas);
392 * Funcion que devuelve el numero de la pagina actual.
394 * @param mixed $id Identificador de la pagina.
399 function numPage($id = null) {
400 $id = ($id) ? $id : $this->_pagina_actual;
401 return (array_search($id, $this->_paginas)) + 1;
405 * Funcion que devuelve la referencia de una pagina vitual. Si no se pasa
406 * nada utilizo la actual.
408 * @param int $pag Numero de pagina.
413 function refPage($pag = null) {
414 return $pag ? $this->_paginas[$pag - 1] :
415 $this->_pagina_actual;
419 * Funcion que devuelve el array de paginas
424 function getPages() {
425 return $this->_paginas;
429 * Funcion que devuelve el ancho de la pagina.
431 * @param string $orientacion Orientacion de la pagina.
436 function getWidth($pagina = null, $orientacion = null)
438 if(is_null($orientacion))
439 $orientacion = $this->getOrientation($pagina);
440 switch (strtolower($orientacion)) {
442 $width = $this->_config['Yf'] - $this->_config['Yi'];
445 $width = $this->_config['Xf'] - $this->_config['Xi'];
452 * Funcion que devuelve el alto de la pagina.
454 * @param string $orientacion Orientacion de la pagina.
459 function getHeight($pagina = null, $orientacion = null)
461 if(is_null($orientacion))
462 $orientacion = $this->getOrientation($pagina);
463 switch (strtolower($orientacion)) {
465 $height = $this->_config['Xf'] - $this->_config['Xi'];
468 $height = $this->_config['Yf'] - $this->_config['Yi'];
474 * Funcion que devuelve la rotacion y traslacion para landscape. Variable X.
482 function _landscapeX($x, $y)
484 return -$y + $this->_config['Xf'];
488 * Funcion que devuelve la rotacion y traslacion para landscape. Variable Y.
496 function _landscapeY($x, $y)
498 return $x + $this->_config['Yi'];
502 * Funcion que devuelve la traslacion para portrait. Variable X.
510 function _portraitX($x, $y)
512 return $x + $this->_config['Xi'];
516 * Funcion que devuelve la traslacion para portrait. Variable Y.
524 function _portraitY($x, $y)
526 return $y + $this->_config['Yi'];