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:12:31 2003
21 Autor: Gonzalo Merayo <gmeray@mecon.gov.ar>
22 -------------------------------------------------------------------------------
24 -----------------------------------------------------------------------------*/
26 require_once 'MLIB/PDF/external/phppdflib.class.php';
29 * Liberia base para el manejo de pdf's.
34 * Orientacion (portrait o landscape).
35 * @var sting $orientacion
38 var $orientacion = "portrait";
42 * Orientacion cambiada, indica la orientacion de la pagina cuando es
44 * @var array $orientacion_distinta
47 var $_orientacion_distinta = array();
54 var $_config = array ();
64 * Identificacion de la pagina actual
65 * @var int $pagina_actual
75 var $_paginas = array();
78 * Nombre del archivo resultado para el display.
87 * @param string $tam Tipo de hoja
88 * @param string $ori Orientacion de las hojas (portrait o landscape).
89 * @param string $nombre Nombre del archivo PDF.
94 function MLIB_PDF($tam = "a4", $ori = "portrait", $nombre = "Doc.pdf")
96 setlocale (LC_ALL, 'en_US');
97 $this->orientacion = $ori;
98 $this->_pdf = new pdffile;
99 $this->_config = include 'MLIB/PDF/medidas.php';
100 $this->_config = $this->_config[$tam];
101 $this->_nombre = $nombre;
105 * Permite agregar nuevas paginas al pdf que se esta armando.
107 * @param string $pagina Tipo de pagina que se va a utilizar.
108 * @param string $orientacion Orientacion de la pagina en particular.
113 function newPage($pagina = "a4", $orientacion = null)
115 $this->_pagina_actual = $this->_pdf->new_page($pagina);
116 $this->_paginas[] = $this->_pagina_actual;
117 if(!is_null($orientacion) && $orientacion != $this->orientacion)
118 $this->_orientacion_distinta[$this->numPage()] = $orientacion;
122 * Funcion que retorna la orientacion de la pagina indicada.
123 * Si no se indica, toma la orientacion de la ultima pagina.
125 * @param int $pagina Numero de la pagina.
130 function getOrientation($pagina = null)
133 $pagina = $this->numPage();
135 if(isset($this->_orientacion_distinta[$pagina]))
136 return $this->_orientacion_distinta[$pagina];
138 return $this->orientacion;
142 * Funcion que genera el archivo y prepara los headers para que se envie.
149 header("Content-Disposition: filename=".$this->_nombre);
150 header("Content-Type: application/pdf");
151 $temp = $this->toPDF();
152 header('Content-Length: ' . strlen($temp));
157 * Funcion que devuelve el PDF.
163 return $this->_pdf->generate();
167 * Funcion que permite agregar texto a una pagina.
171 * @param string $texto $texto
172 * @param int $estilo $estilo
173 * @param int $pag Numero de pagina virtual.
174 * @param string $transformacion Indica la orientacion de la pagina.
179 function addText($X, $Y, $texto, $estilo = '', $pag = null, $transformacion
183 if(is_null($transformacion))
184 $transformacion = $this->getOrientation($pag);
185 switch (strtolower($transformacion)) {
187 $X = $this->_portraitX($x,$y);
188 $Y = $this->_portraitY($x,$y);
191 $X = $this->_landscapeX($x,$y);
192 $Y = $this->_landscapeY($x,$y);
193 @$estilo['rotation'] += 90;
196 $this->_pdf->draw_text($X, $Y, $texto, $this->refPage($pag), $estilo);
200 * Funcion que permite agregar un rectangulo a una pagina.
206 * @param long $estilo $estilo
207 * @param int $pag Numero de pagina virtual.
208 * @param string $transformacion Indica la orientacion de la pagina.
213 function addRectangle($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null,
214 $transformacion = null)
220 if(is_null($transformacion))
221 $transformacion = $this->getOrientation($pag);
222 switch (strtolower($transformacion)) {
224 $Xi = $this->_portraitX($xi,$yi);
225 $Yi = $this->_portraitY($xi,$yi);
226 $Xf = $this->_portraitX($xf,$yf);
227 $Yf = $this->_portraitY($xf,$yf);
230 $Xi = $this->_landscapeX($xi,$yi);
231 $Yi = $this->_landscapeY($xi,$yi);
232 $Xf = $this->_landscapeX($xf,$yf);
233 $Yf = $this->_landscapeY($xf,$yf);
236 $this->_pdf->draw_rectangle($Yi, $Xi, $Yf, $Xf, $this->refPage($pag), $estilo);
240 * Funcion que permite agregar una linea a una pagina.
246 * @param int $estilo $estilo
247 * @param int $pag Numero de pagina virtual.
248 * @param string $transformacion Indica la orientacion de la pagina.
253 function addLine($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null,
254 $transformacion = null)
260 if(is_null($transformacion))
261 $transformacion = $this->getOrientation($pag);
262 switch (strtolower($transformacion)) {
264 $Xi = $this->_portraitX($xi,$yi);
265 $Yi = $this->_portraitY($xi,$yi);
266 $Xf = $this->_portraitX($xf,$yf);
267 $Yf = $this->_portraitY($xf,$yf);
270 $Xi = $this->_landscapeX($xi,$yi);
271 $Yi = $this->_landscapeY($xi,$yi);
272 $Xf = $this->_landscapeX($xf,$yf);
273 $Yf = $this->_landscapeY($xf,$yf);
276 $this->_pdf->draw_line(array($Xi,$Xf),array($Yi,$Yf),
277 $this->refPage($pag),$estilo);
281 * Funcion que permite agregar una imagen JPG o PNG a una pagina.
283 * @param string $archivo Path completo del archivo imagen.
284 * @param int $X Posicion Horizontal.
285 * @param int $Y Posixion vertical.
286 * @param int $pag Numero de pagina virtual.
287 * @param string $formato Formato del archivo (Extension).
288 * @param string $transformacion Indica la orientacion de la pagina.
289 * @param array $param Parametros de la libreria.
294 function addImage($archivo, $X, $Y, $pag = null, $formato = null,
295 $transformacion = null, $param = array()) {
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);
308 $param['rotation'] = 90;
311 $formato = strtolower($formato);
312 $fh = fopen($archivo, "r");
313 $filedata = fread($fh, filesize($archivo));
317 $image = $this->_pdf->jfif_embed($filedata);
320 $image = $this->_pdf->png_embed($filedata);
323 $this->_pdf->image_place($image, $Y, $X, $this->refPage($pag), $param);
327 * Funcion que wrappea una linea.
329 * @param strgin $texto Texto que quiere wrappearse.
330 * @param int $l_max Largo maximo del texto.
331 * @param array $attr Atributos del texto.
336 function wrapLine($texto, $l_max, $attr) {
337 //El if lo estoy haciendo porque en la funcion wordwrap de la libreria
338 //externa no tienen en cuenta que te pueden pasar un texto vacio a
339 //wrapear -> Amerita un mail a los autores.
341 return $this->_pdf->wrap_line ($texto, $l_max, $attr);
349 * Funcion que wrappea una linea.
351 * @param strgin $texto Texto que quiere wrappearse.
352 * @param int $l_max Largo maximo del texto.
353 * @param array $attr Atributos del texto.
358 function wordWrap($texto, $l_max, $attr) {
359 //El if lo estoy haciendo porque en la funcion wordwrap de la libreria
360 //externa no tienen en cuenta que te pueden pasar un texto vacio a
361 //wrapear -> Amerita un mail a los autores.
363 return $this->_pdf->word_wrap ($texto, $l_max, $attr);
371 * Funcion que calcula cuanto va a ocupar cierto texto segun su formato en
374 * @param strgin $texto Texto que quiere medirse.
375 * @param array $attr Atributos del texto.
380 function strlen($texto, $attr = '') {
381 return $this->_pdf->strlen($texto, $attr);
385 * Funcion que devuelve la cantidad de paginas que contiene el documento.
390 function countPages() {
391 return count($this->_paginas);
395 * Funcion que devuelve el numero de la pagina actual.
397 * @param mixed $id Identificador de la pagina.
402 function numPage($id = null) {
403 $id = ($id) ? $id : $this->_pagina_actual;
404 return (array_search($id, $this->_paginas)) + 1;
408 * Funcion que devuelve la referencia de una pagina vitual. Si no se pasa
409 * nada utilizo la actual.
411 * @param int $pag Numero de pagina.
416 function refPage($pag = null) {
417 return $pag ? $this->_paginas[$pag - 1] :
418 $this->_pagina_actual;
422 * Funcion que devuelve el array de paginas
427 function getPages() {
428 return $this->_paginas;
432 * Funcion que devuelve el ancho de la pagina.
434 * @param string $orientacion Orientacion de la pagina.
439 function getWidth($pagina = null, $orientacion = null)
441 if(is_null($orientacion))
442 $orientacion = $this->getOrientation($pagina);
443 switch (strtolower($orientacion)) {
445 $width = $this->_config['Yf'] - $this->_config['Yi'];
448 $width = $this->_config['Xf'] - $this->_config['Xi'];
455 * Funcion que devuelve el alto de la pagina.
457 * @param string $orientacion Orientacion de la pagina.
462 function getHeight($pagina = null, $orientacion = null)
464 if(is_null($orientacion))
465 $orientacion = $this->getOrientation($pagina);
466 switch (strtolower($orientacion)) {
468 $height = $this->_config['Xf'] - $this->_config['Xi'];
471 $height = $this->_config['Yf'] - $this->_config['Yi'];
477 * Funcion que devuelve la rotacion y traslacion para landscape. Variable X.
485 function _landscapeX($x, $y)
487 return -$y + $this->_config['Xf'];
491 * Funcion que devuelve la rotacion y traslacion para landscape. Variable Y.
499 function _landscapeY($x, $y)
501 return $x + $this->_config['Yi'];
505 * Funcion que devuelve la traslacion para portrait. Variable X.
513 function _portraitX($x, $y)
515 return $x + $this->_config['Xi'];
519 * Funcion que devuelve la traslacion para portrait. Variable Y.
527 function _portraitY($x, $y)
529 return $y + $this->_config['Yi'];
533 * Funcion que devuelve el tamaƱo de una imagen.
535 * @param $oid Object id
537 function getImageSize($oid) {
538 return $this->get_image_size($oid);