]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/PDF.php
PDF con funcionalidad suficiente para hacer cosas simples
[mecon/meconlib.git] / lib / MECON / PDF.php
1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
3                              Ministerio de Economía
4                                     meconlib
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
7
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)
11 any later version.
12
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.
16  
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 -------------------------------------------------------------------------------
24 $Id$
25 -----------------------------------------------------------------------------*/
26
27 require_once 'MECON/PDF/external/phppdflib.class.php';
28
29 /**
30  * Liberia base para el manejo de pdf's.  
31  */
32 class MECON_PDF {
33     
34     /**
35      * Libreria externa.
36      * @var    int $pdf
37      * @access private
38      */
39     var $_pdf;
40
41     /**
42      * Identificacion de la pagina actual
43      * @var    int $pagina_actual
44      * @access private
45      */
46     var $_pagina_actual;
47
48     /**
49      * Array de paginas.
50      * @var array $paginas
51      * @access private
52      */
53     var $_paginas;
54
55     /**
56      * Class constructor.
57      *
58      * @return void
59      * @access public
60      */
61     function MECON_PDF()
62     {
63         $this->_pdf = new pdffile;
64     }
65
66     /**
67      * Permite agregar nuevas paginas al pdf que se esta armando.
68      *
69      * @param  string $pagina Tipo de pagina que se va a utilizar.
70      *
71      * @return void
72      * @access public
73      */
74     function newPage($pagina = "a4")
75     {
76         $this->_pagina_actual = $this->_pdf->new_page($pagina);
77         $this->_paginas[] = $this->_pagina_actual;
78     }
79
80     /**
81      * Funcion que genera el archivo y prepara los headers para que se envie.
82      *    
83      * @return void
84      * @access public
85      */
86     function display() 
87     {
88         header("Content-Disposition: filename=Doc.pdf");
89         header("Content-Type: application/pdf");
90         $temp = $this->toPDF();
91         header('Content-Length: ' . strlen($temp));
92         echo $temp;
93     }
94
95     /**
96      * Funcion que devuelve el PDF.
97      *
98      * @return string
99      * @access public
100      */
101     function toPDF() {
102         return $this->_pdf->generate();
103     }
104
105     /**
106      * Funcion que permite agregar texto a una pagina.
107      *
108      * @param int $X $X
109      * @param int $Y $Y
110      * @param string $texto $texto
111      * @param int $estilo $estilo
112      * @param int $pag Numero de pagina virtual.
113      *
114      * @return void
115      * @access public
116      */
117     function addText($X, $Y, $texto, $estilo = '', $pag = null)
118     {
119         $this->_pdf->draw_text($X, $Y, $texto, $this->refPage($pag), $estilo);
120     }
121
122     /**
123      * Funcion que permite agregar un rectangulo a una pagina.
124      *
125      * @param int $Xi $Xi
126      * @param int $Yi $Yi
127      * @param int $Xf $Xf
128      * @param int $Yf $Yf
129      * @param long $estilo $estilo
130      * @param int $pag Numero de pagina virtual.
131      *
132      * @return void
133      * @access public
134      */
135     function addRectangle($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null) 
136     {
137         $this->_pdf->draw_rectangle($Xi, $Yi, $Xf, $Yf, $this->refPage($pag), $estilo);
138     }
139
140     /**
141      * Funcion que permite agregar una linea a una pagina.
142      *
143      * @param int $Xi $Xi
144      * @param int $Yi $Yi
145      * @param int $Xf $Xf
146      * @param int $Yf $Yf
147      * @param int $estilo $estilo
148      * @param int $pag Numero de pagina virtual.
149      *
150      * @return void
151      * @access public
152      */
153     function addLine($Xi, $Yi, $Xf, $Yf, $estilo = '', $pag = null)
154     {
155         $this->_pdf->draw_line(array($Xi,$Xf),array($Yi,$Yf), 
156                 $this->refPage($pag),$estilo);
157     }
158
159     /**
160      * Funcion que permite agregar una imagen JPG a una pagina.
161      *
162      * @param string $archivo Path completo del archivo imagen.
163      * @param int    $X Posicion Horizontal.
164      * @param int    $Y Posixion vertical.
165      * @param int    $pag Numero de pagina virtual.
166      * @param string $formato Formato del archivo (Extension).
167      *
168      * @return void
169      * @access public
170      */
171     function addImage($archivo, $X, $Y, $pag = null, $formato = null) {
172         $formato = strtolower($formato);
173         switch ($formato) {
174             case 'jpg':
175                 $fh = fopen($archivo, "r"); 
176                 $filedata = fread($fh, filesize($archivo));
177                 fclose($fh);
178                 $image = $this->_pdf->jfif_embed($filedata);
179                 $this->_pdf->image_place($image, $Y, $X, 
180                         $this->refPage($pag));
181                 break;
182         }
183     }
184
185     /**
186      * Funcion que wrappea una linea.                                         
187      *
188      * @param strgin $texto Texto que quiere wrappearse.
189      * @param int    $l_max Largo maximo del texto.
190      * @param array  $attr  Atributos del texto.
191      *
192      * @return string
193      * @access public
194      */
195     function wrapLine($texto, $l_max, $attr) {
196         return $this->_pdf->wrap_line ($texto, $l_max, $attr);
197     }
198
199     /**
200      * Funcion que wrappea una linea.                                       
201      *
202      * @param strgin $texto Texto que quiere wrappearse.
203      * @param int    $l_max Largo maximo del texto.
204      * @param array  $attr  Atributos del texto.
205      *
206      * @return string
207      * @access public
208      */
209     function wordWrap($texto, $l_max, $attr) {
210         return $this->_pdf->word_wrap ($texto, $l_max, $attr);
211     }
212     
213     /**
214      * Funcion que calcula cuanto va a ocupar cierto texto segun su formato en
215      * una pagina.
216      *
217      * @param strgin $texto Texto que quiere medirse.
218      * @param array  $attr  Atributos del texto.
219      *
220      * @return int
221      * @access public
222      */
223     function strlen($texto, $attr = '') {
224         return $this->_pdf->strlen($texto, $attr);
225     }
226
227     /**
228      * Funcion que devuelve la cantidad de paginas que contiene el documento.
229      *
230      * @return int
231      * @access public
232      */
233     function countPages() {
234         return count($this->_paginas);
235     }
236     
237     /**
238      * Funcion que devuelve el numero de la pagina actual.                   
239      *
240      * @param mixed $id Identificador de la pagina.
241      *
242      * @return int
243      * @access public
244      */
245     function numPage($id = null) {
246         $id = ($id) ? $id : $this->_pagina_actual;
247         return (array_search($id, $this->_paginas)) + 1;
248     }
249
250     /**
251      * Funcion que devuelve la referencia de una pagina vitual. Si no se pasa
252      * nada utilizo la actual.
253      *
254      * @param int $pag Numero de pagina.
255      *
256      * @return int
257      * @access public
258      */
259     function refPage($pag = null) {
260         return $pag ? $this->_paginas[$pag - 1] :
261             $this->_pagina_actual;
262     }
263
264     /**
265      * Funcion que devuelve el array de paginas
266      *
267      * @return array
268      * @access public
269      */
270     function getPages() {
271         return $this->_paginas;
272     }
273 }
274 ?>