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: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();
81 * @param string $tam Tipo de hoja
82 * @param string $ori Orientacion de las hojas (portrait o landscape).
87 function MECON_PDF($tam = "a4", $ori = "portrait")
89 setlocale (LC_ALL, 'en_US');
90 $this->orientacion = $ori;
91 $this->_pdf = new pdffile;
92 $this->_config = include 'MECON/PDF/medidas.php';
93 $this->_config = $this->_config[$tam];
97 * Permite agregar nuevas paginas al pdf que se esta armando.
99 * @param string $pagina Tipo de pagina que se va a utilizar.
100 * @param string $orientacion Orientacion de la pagina en particular.
105 function newPage($pagina = "a4", $orientacion = null)
107 $this->_pagina_actual = $this->_pdf->new_page($pagina);
108 $this->_paginas[] = $this->_pagina_actual;
109 if(!is_null($orientacion) && $orientacion != $this->orientacion)
110 $this->_orientacion_distinta[$this->numPage()] = $orientacion;
114 * Funcion que retorna la orientacion de la pagina indicada.
115 * Si no se indica, toma la orientacion de la ultima pagina.
117 * @param int $pagina Numero de la pagina.
122 function getOrientation($pagina = null)
125 $pagina = $this->numPage();
127 if(isset($this->_orientacion_distinta[$pagina]))
128 return $this->_orientacion_distinta[$pagina];
130 return $this->orientacion;
134 * Funcion que genera el archivo y prepara los headers para que se envie.
141 header("Content-Disposition: filename=Doc.pdf");
142 header("Content-Type: application/pdf");
143 $temp = $this->toPDF();
144 header('Content-Length: ' . strlen($temp));
149 * Funcion que devuelve el PDF.
155 return $this->_pdf->generate();
159 * Funcion que permite agregar texto a una pagina.
163 * @param string $texto $texto
164 * @param int $estilo $estilo
165 * @param int $pag Numero de pagina virtual.
166 * @param string $transformacion Indica la orientacion de la pagina.
171 function addText($X, $Y, $texto, $estilo = '', $pag = null, $transformacion
175 if(is_null($transformacion))
176 $transformacion = $this->getOrientation($pag);
177 switch (strtolower($transformacion)) {
179 $X = $this->_portraitX($x,$y);
180 $Y = $this->_portraitY($x,$y);
183 $X = $this->_landscapeX($x,$y);
184 $Y = $this->_landscapeY($x,$y);
185 @$estilo['rotation'] += 90;
188 $this->_pdf->draw_text($X, $Y, $texto, $this->refPage($pag), $estilo);
192 * Funcion que permite agregar un rectangulo a una pagina.
198 * @param long $estilo $estilo
199 * @param int $pag Numero de pagina virtual.
200 * @param string $transformacion Indica la orientacion de la pagina.
205 function addRectangle($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null,
206 $transformacion = null)
212 if(is_null($transformacion))
213 $transformacion = $this->getOrientation($pag);
214 switch (strtolower($transformacion)) {
216 $Xi = $this->_portraitX($xi,$yi);
217 $Yi = $this->_portraitY($xi,$yi);
218 $Xf = $this->_portraitX($xf,$yf);
219 $Yf = $this->_portraitY($xf,$yf);
222 $Xi = $this->_landscapeX($xi,$yi);
223 $Yi = $this->_landscapeY($xi,$yi);
224 $Xf = $this->_landscapeX($xf,$yf);
225 $Yf = $this->_landscapeY($xf,$yf);
228 $this->_pdf->draw_rectangle($Yi, $Xi, $Yf, $Xf, $this->refPage($pag), $estilo);
232 * Funcion que permite agregar una linea a una pagina.
238 * @param int $estilo $estilo
239 * @param int $pag Numero de pagina virtual.
240 * @param string $transformacion Indica la orientacion de la pagina.
245 function addLine($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null,
246 $transformacion = null)
252 if(is_null($transformacion))
253 $transformacion = $this->getOrientation($pag);
254 switch (strtolower($transformacion)) {
256 $Xi = $this->_portraitX($xi,$yi);
257 $Yi = $this->_portraitY($xi,$yi);
258 $Xf = $this->_portraitX($xf,$yf);
259 $Yf = $this->_portraitY($xf,$yf);
262 $Xi = $this->_landscapeX($xi,$yi);
263 $Yi = $this->_landscapeY($xi,$yi);
264 $Xf = $this->_landscapeX($xf,$yf);
265 $Yf = $this->_landscapeY($xf,$yf);
268 $this->_pdf->draw_line(array($Xi,$Xf),array($Yi,$Yf),
269 $this->refPage($pag),$estilo);
273 * Funcion que permite agregar una imagen JPG a una pagina.
275 * @param string $archivo Path completo del archivo imagen.
276 * @param int $X Posicion Horizontal.
277 * @param int $Y Posixion vertical.
278 * @param int $pag Numero de pagina virtual.
279 * @param string $formato Formato del archivo (Extension).
280 * @param string $transformacion Indica la orientacion de la pagina.
285 function addImage($archivo, $X, $Y, $pag = null, $formato = null,
286 $transformacion = null) {
289 if(is_null($transformacion))
290 $transformacion = $this->getOrientation($pag);
291 switch (strtolower($transformacion)) {
293 $X = $this->_portraitX($x,$y);
294 $Y = $this->_portraitY($x,$y);
297 $X = $this->_landscapeX($x,$y);
298 $Y = $this->_landscapeY($x,$y);
301 $formato = strtolower($formato);
304 $fh = fopen($archivo, "r");
305 $filedata = fread($fh, filesize($archivo));
307 $image = $this->_pdf->jfif_embed($filedata);
308 $this->_pdf->image_place($image, $Y, $X,
309 $this->refPage($pag));
315 * Funcion que wrappea una linea.
317 * @param strgin $texto Texto que quiere wrappearse.
318 * @param int $l_max Largo maximo del texto.
319 * @param array $attr Atributos del texto.
324 function wrapLine($texto, $l_max, $attr) {
325 //El if lo estoy haciendo porque en la funcion wordwrap de la libreria
326 //externa no tienen en cuenta que te pueden pasar un texto vacio a
327 //wrapear -> Amerita un mail a los autores.
329 return $this->_pdf->wrap_line ($texto, $l_max, $attr);
337 * Funcion que wrappea una linea.
339 * @param strgin $texto Texto que quiere wrappearse.
340 * @param int $l_max Largo maximo del texto.
341 * @param array $attr Atributos del texto.
346 function wordWrap($texto, $l_max, $attr) {
347 //El if lo estoy haciendo porque en la funcion wordwrap de la libreria
348 //externa no tienen en cuenta que te pueden pasar un texto vacio a
349 //wrapear -> Amerita un mail a los autores.
351 return $this->_pdf->word_wrap ($texto, $l_max, $attr);
359 * Funcion que calcula cuanto va a ocupar cierto texto segun su formato en
362 * @param strgin $texto Texto que quiere medirse.
363 * @param array $attr Atributos del texto.
368 function strlen($texto, $attr = '') {
369 return $this->_pdf->strlen($texto, $attr);
373 * Funcion que devuelve la cantidad de paginas que contiene el documento.
378 function countPages() {
379 return count($this->_paginas);
383 * Funcion que devuelve el numero de la pagina actual.
385 * @param mixed $id Identificador de la pagina.
390 function numPage($id = null) {
391 $id = ($id) ? $id : $this->_pagina_actual;
392 return (array_search($id, $this->_paginas)) + 1;
396 * Funcion que devuelve la referencia de una pagina vitual. Si no se pasa
397 * nada utilizo la actual.
399 * @param int $pag Numero de pagina.
404 function refPage($pag = null) {
405 return $pag ? $this->_paginas[$pag - 1] :
406 $this->_pagina_actual;
410 * Funcion que devuelve el array de paginas
415 function getPages() {
416 return $this->_paginas;
420 * Funcion que devuelve el ancho de la pagina.
422 * @param string $orientacion Orientacion de la pagina.
427 function getWidth($pagina = null, $orientacion = null)
429 if(is_null($orientacion))
430 $orientacion = $this->getOrientation($pagina);
431 switch (strtolower($orientacion)) {
433 $width = $this->_config['Yf'] - $this->_config['Yi'];
436 $width = $this->_config['Xf'] - $this->_config['Xi'];
443 * Funcion que devuelve el alto de la pagina.
445 * @param string $orientacion Orientacion de la pagina.
450 function getHeight($pagina = null, $orientacion = null)
452 if(is_null($orientacion))
453 $orientacion = $this->getOrientation($pagina);
454 switch (strtolower($orientacion)) {
456 $height = $this->_config['Xf'] - $this->_config['Xi'];
459 $height = $this->_config['Yf'] - $this->_config['Yi'];
465 * Funcion que devuelve la rotacion y traslacion para landscape. Variable X.
473 function _landscapeX($x, $y)
475 return -$y + $this->_config['Xf'];
479 * Funcion que devuelve la rotacion y traslacion para landscape. Variable Y.
487 function _landscapeY($x, $y)
489 return $x + $this->_config['Yi'];
493 * Funcion que devuelve la traslacion para portrait. Variable X.
501 function _portraitX($x, $y)
503 return $x + $this->_config['Xi'];
507 * Funcion que devuelve la traslacion para portrait. Variable Y.
515 function _portraitY($x, $y)
517 return $y + $this->_config['Yi'];