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.
39 var $_config = array ();
49 * Identificacion de la pagina actual
50 * @var int $pagina_actual
65 * @param string $tam Tipo de hoja
70 function MECON_PDF($tam = "a4")
72 $this->_pdf = new pdffile;
73 $this->_config = include 'MECON/PDF/medidas.php';
74 $this->_config = $this->_config[$tam];
78 * Permite agregar nuevas paginas al pdf que se esta armando.
80 * @param string $pagina Tipo de pagina que se va a utilizar.
85 function newPage($pagina = "a4")
87 $this->_pagina_actual = $this->_pdf->new_page($pagina);
88 $this->_paginas[] = $this->_pagina_actual;
92 * Funcion que genera el archivo y prepara los headers para que se envie.
99 header("Content-Disposition: filename=Doc.pdf");
100 header("Content-Type: application/pdf");
101 $temp = $this->toPDF();
102 header('Content-Length: ' . strlen($temp));
107 * Funcion que devuelve el PDF.
113 return $this->_pdf->generate();
117 * Funcion que permite agregar texto a una pagina.
121 * @param string $texto $texto
122 * @param int $estilo $estilo
123 * @param int $pag Numero de pagina virtual.
124 * @param string $transformacion Indica la orientacion de la pagina.
129 function addText($X, $Y, $texto, $estilo = '', $pag = null, $transformacion = '') {
130 //@TODO Ver si $texto es un objeto
134 switch (strtolower($transformacion)) {
136 $X = $this->_portraitX($x,$y);
137 $Y = $this->_portraitY($x,$y);
140 $X = $this->_landscapeX($x,$y);
141 $Y = $this->_landscapeY($x,$y);
142 $estilo['rotation'] = 90;
145 $this->_pdf->draw_text($X, $Y, $texto, $this->refPage($pag), $estilo);
149 * Funcion que permite agregar un rectangulo a una pagina.
155 * @param long $estilo $estilo
156 * @param int $pag Numero de pagina virtual.
157 * @param string $transformacion Indica la orientacion de la pagina.
162 function addRectangle($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null,
163 $transformacion = 'portrait')
169 switch (strtolower($transformacion)) {
171 $Xi = $this->_portraitX($xi,$yi);
172 $Yi = $this->_portraitY($xi,$yi);
173 $Xf = $this->_portraitX($xf,$yf);
174 $Yf = $this->_portraitY($xf,$yf);
177 $Xi = $this->_landscapeX($xi,$yi);
178 $Yi = $this->_landscapeY($xi,$yi);
179 $Xf = $this->_landscapeX($xf,$yf);
180 $Yf = $this->_landscapeY($xf,$yf);
183 $this->_pdf->draw_rectangle($Yi, $Xi, $Yf, $Xf, $this->refPage($pag), $estilo);
187 * Funcion que permite agregar una linea a una pagina.
193 * @param int $estilo $estilo
194 * @param int $pag Numero de pagina virtual.
195 * @param string $transformacion Indica la orientacion de la pagina.
200 function addLine($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null,
201 $transformacion = 'portrait')
207 switch (strtolower($transformacion)) {
209 $Xi = $this->_portraitX($xi,$yi);
210 $Yi = $this->_portraitY($xi,$yi);
211 $Xf = $this->_portraitX($xf,$yf);
212 $Yf = $this->_portraitY($xf,$yf);
215 $Xi = $this->_landscapeX($xi,$yi);
216 $Yi = $this->_landscapeY($xi,$yi);
217 $Xf = $this->_landscapeX($xf,$yf);
218 $Yf = $this->_landscapeY($xf,$yf);
221 $this->_pdf->draw_line(array($Xi,$Xf),array($Yi,$Yf),
222 $this->refPage($pag),$estilo);
226 * Funcion que permite agregar una imagen JPG a una pagina.
228 * @param string $archivo Path completo del archivo imagen.
229 * @param int $X Posicion Horizontal.
230 * @param int $Y Posixion vertical.
231 * @param int $pag Numero de pagina virtual.
232 * @param string $formato Formato del archivo (Extension).
233 * @param string $transformacion Indica la orientacion de la pagina.
238 function addImage($archivo, $X, $Y, $pag = null, $formato = null,
239 $transformacion = 'portrait') {
242 switch (strtolower($transformacion)) {
244 $X = $this->_portraitX($x,$y);
245 $Y = $this->_portraitY($x,$y);
248 $X = $this->_landscapeX($x,$y);
249 $Y = $this->_landscapeY($x,$y);
252 $formato = strtolower($formato);
255 $fh = fopen($archivo, "r");
256 $filedata = fread($fh, filesize($archivo));
258 $image = $this->_pdf->jfif_embed($filedata);
259 $this->_pdf->image_place($image, $Y, $X,
260 $this->refPage($pag));
266 * Funcion que wrappea una linea.
268 * @param strgin $texto Texto que quiere wrappearse.
269 * @param int $l_max Largo maximo del texto.
270 * @param array $attr Atributos del texto.
275 function wrapLine($texto, $l_max, $attr) {
276 return $this->_pdf->wrap_line ($texto, $l_max, $attr);
280 * Funcion que wrappea una linea.
282 * @param strgin $texto Texto que quiere wrappearse.
283 * @param int $l_max Largo maximo del texto.
284 * @param array $attr Atributos del texto.
289 function wordWrap($texto, $l_max, $attr) {
290 return $this->_pdf->word_wrap ($texto, $l_max, $attr);
294 * Funcion que calcula cuanto va a ocupar cierto texto segun su formato en
297 * @param strgin $texto Texto que quiere medirse.
298 * @param array $attr Atributos del texto.
303 function strlen($texto, $attr = '') {
304 return $this->_pdf->strlen($texto, $attr);
308 * Funcion que devuelve la cantidad de paginas que contiene el documento.
313 function countPages() {
314 return count($this->_paginas);
318 * Funcion que devuelve el numero de la pagina actual.
320 * @param mixed $id Identificador de la pagina.
325 function numPage($id = null) {
326 $id = ($id) ? $id : $this->_pagina_actual;
327 return (array_search($id, $this->_paginas)) + 1;
331 * Funcion que devuelve la referencia de una pagina vitual. Si no se pasa
332 * nada utilizo la actual.
334 * @param int $pag Numero de pagina.
339 function refPage($pag = null) {
340 return $pag ? $this->_paginas[$pag - 1] :
341 $this->_pagina_actual;
345 * Funcion que devuelve el array de paginas
350 function getPages() {
351 return $this->_paginas;
355 * Funcion que devuelve el ancho de la pagina.
357 * @param string $orientacion Orientacion de la pagina.
362 function getWidth($orientacion = 'portrait')
364 switch (strtolower($orientacion)) {
366 $width = $this->_config['Yf'] - $this->_config['Yi'];
369 $width = $this->_config['Xf'] - $this->_config['Xi'];
376 * Funcion que devuelve el alto de la pagina.
378 * @param string $orientacion Orientacion de la pagina.
383 function getHeight($orientacion = 'portrait')
385 switch (strtolower($orientacion)) {
387 $height = $this->_config['Xf'] - $this->_config['Xi'];
390 $height = $this->_config['Yf'] - $this->_config['Yi'];
396 * Funcion que devuelve la rotacion y traslacion para landscape. Variable X.
404 function _landscapeX($x, $y)
406 return -$y + $this->_config['Xf'];
410 * Funcion que devuelve la rotacion y traslacion para landscape. Variable Y.
418 function _landscapeY($x, $y)
420 return $x + $this->_config['Yi'];
424 * Funcion que devuelve la traslacion para portrait. Variable X.
432 function _portraitX($x, $y)
434 return $x + $this->_config['Xi'];
438 * Funcion que devuelve la traslacion para portrait. Variable Y.
446 function _portraitY($x, $y)
448 return $y + $this->_config['Yi'];