]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/PDF/Texto.php
Se cambian los die(expr) por trigger_error(expr, E_USER_ERROR) para poder interceptar...
[mecon/meconlib.git] / lib / MECON / PDF / Texto.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: jue nov  6 16:13:38 ART 2003
22 Autor:  Martin Marrese <mmarre@mecon.gov.ar>
23 -------------------------------------------------------------------------------
24 $Id$
25 -----------------------------------------------------------------------------*/
26
27 require_once 'MECON/PDF/Contenido.php';
28
29 /**
30  * Libreria de texto en PDF.
31  */
32 class MECON_PDF_Texto extends MECON_PDF_Contenido {
33     
34     /**
35      * Parrafos que componen el texto.
36      * @var array $parafos
37      * @access protected
38      */
39     var $_parrafos = array();
40
41     /**
42      * Estilos PDF para cada parrafo. Entre los estilos pdf se debe encontrar
43      * aquel que defina la alineacion 'align' => center, left o right
44      * @var array $estilos
45      * @access protected
46      */
47     var $_estilos = array();
48
49     /**
50      * Estilo estandar.
51      * @var array $estilo_defecto
52      * @access protected
53      */
54     var $_estilo_defecto = array (
55             'font'   => 'Helvetica-Bold',
56             'height' => 8,
57             'align'  => 'left'
58             );
59
60     /**
61      * Orientacion de las nuevas paginas
62      * @var string $orientacion  
63      * @access protected
64      */
65     var $_orientacion;
66     
67     /**
68      * Class Constructor.
69      *
70      * @param string $orientacion Orientacion que tendran las nuevas paginas que
71      * esta clase genere.
72      *
73      * @return void
74      * @access public
75      */
76     function MECON_PDF_Texto($orientacion = null) {
77         $this->_orientacion = $orientacion;
78     }
79
80     /**
81      * Funcion que se encarga de crear las nuevas paginas.
82      *
83      * @param &Object $MARCO MECON_PDF_Marco
84      *
85      * @return void
86      * @access protected
87      */
88     function _newPage(&$MARCO) {
89         $tmp = ($this->_orientacion) ? $this->_orientacion :
90             $MARCO->getOrientation();
91         $MARCO->newPage($MARCO->tamanio, $tmp);               
92     }
93    
94     /**
95      * Funcion que agrega el contenido del texto al PDF.
96      *
97      * @param &Object $MARCO MECON_PDF_Marco
98      *
99      * @return void
100      * @access public
101      */
102     function toPDF(&$MARCO) {
103         $alto = $MARCO->espacioDisponible;
104         if ($alto <= 0 ) {
105             $this->_newPage($MARCO);
106             $alto = $MARCO->espacioDisponible;
107         }
108         
109         $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation());
110         $orientacion = $MARCO->getOrientation();
111
112         for ($i=0; $i < count($this->_parrafos); $i++) {
113             if (@!$this->_estilos[$i]) {
114                 $this->_estilos[$i] = $this->_estilo_defecto;
115             }
116         
117             $txt = @$MARCO->wordWrap($this->_parrafos[$i], $ancho_pagina - 2,
118                     $this->_estilos[$i]);
119             
120             foreach ($txt as $t) {
121                 $alto -= $this->_estilos[$i]['height'];
122                 if ($alto <= 0) 
123                 {
124                     $this->_newPage($MARCO);
125                     $alto = $MARCO->espacioDisponible;
126                 }
127
128                 if (@$this->_estilos[$i]['align'] == 'center') {
129                     $tam = @$MARCO->strlen($t, $this->_estilos[$i]);
130                     $init = ($ancho_pagina - $tam) / 2;
131                 }
132                 elseif (@$this->_estilos[$i]['align'] == 'right') {
133                     $tam = @$MARCO->strlen($t, $this->_estilos[$i]);
134                     $init = $ancho_pagina - $tam + 1;
135                 }
136                 else {
137                     $init = 0;
138                 }
139            
140
141                 $MARCO->addText($init, $alto + 2,
142                         $t, $this->_estilos[$i], null, $orientacion);
143            
144
145             }
146         }
147         $MARCO->espacioDisponible = $alto;
148     }
149  
150     
151     /**
152      * Funcion que permite agregar parrafos al texto. Puede recibir un string
153      * con parrafos separados por \\n o un array con las mismas caracteristicas.
154      * Los estilos deben ser pasados dentro de un array, en donde a cada clave
155      * del array de contenido que se forme con el contenido le correspondera una
156      * clave del array de estilos. Existe la posibilidad de pasar solo un estilo
157      * y que este sea utilizado por todos los parrafos que se genere.
158      * 
159      * @param mixed $cont   Parrafos a agregar
160      * @param array $estilo Estilos de los parrafos.
161      *
162      * @access public
163      * @return void
164      */
165     function addContent($cont) {
166         if (is_string($cont)) {
167             $cont = split ("\n", $cont);
168         }
169         foreach ($cont as $c) {
170             //Me aseguro que lo que me pasen dentro del array de parrafos
171             //sean parrafos.
172             $c = split ("\n", $c); 
173             foreach ($c as $tmp) {
174                 $this->_parrafos[] = $tmp;
175             }
176         }
177     }
178
179     /**
180      * Funcion que permite remover parrafos del texto. Recibe el id del parrafo
181      * (posicion dentro del array de parrafos). Elimina tambien el estilo que
182      * este tiene asociado en el array de parrafos.
183      * 
184      * @param int $pos Posicion del parrafo a eliminar.
185      *
186      * @access public
187      * @return void
188      */
189     function removeContent($pos) {
190         array_splice($this->_parrafos, $pos, 1);
191         array_splice($this->_estilos, $pos, 1);
192     }
193     
194     /**
195      * Funcion que permite setear los parrafos al texto. Recibe el texto (array
196      * o string) a agregar y una posicion en donde en donde ponerlo (posicion
197      * del array de parrafos). Si no recibe un identificador del parrafo, borra
198      * el contenido actual y agrega solamente lo que se paso por parametro.
199      * Los estilos deben ser pasados dentro de un array, en donde a cada clave
200      * del array de contenido que se forme con el contenido le correspondera una
201      * clave del array de estilos. Existe la posibilidad de pasar solo un estilo
202      * y que este sea utilizado por todos los parrafos que se genere.
203      * 
204      * @param int $pos      Posicion del/los parrafo/s
205      * @param mixed $cont   Parrafos a agregar
206      *
207      * @access public
208      * @return void
209      */
210     function setContent($pos, $cont) {
211         if (is_string($cont)) {
212             $cont = split ("\n", $cont);
213         }
214         foreach ($cont as $c) {
215             //Me aseguro que lo que me pasen dentro del array de parrafos
216             //sean parrafos.
217             $c = split ("\n", $c); 
218             foreach ($c as $tmp) {
219                 $parrafos[] = $tmp;
220             }
221         }
222         $tmp = array_slice ($this->_parrafos, 0, $pos);
223         $tmp = array_merge ($tmp, $parrafos, array_slice ($this->_parrafos, 
224                     $pos));
225         $this->_parrafos = $tmp;
226     }
227   
228     /**
229      * Funcion que permite modificar los estilos de uno o mas parrafos.
230      *
231      * @param mixed $pos Array o int que identifique la posicion de los parrafos.
232      * @param array $estilo Array de estilos.
233      *
234      * @access public
235      * @return void
236      */
237     function updateEstilo($pos, $estilo) {
238        $this->_estilos[$pos]  = array_merge($this->_estilos[$pos], $estilo);
239     }
240     
241     /**
242      * Funcion que permite eliminar los estilos de uno o mas parrafos.
243      *
244      * @param mixed $pos Array o int que identifique la posicion de los parrafos.
245      *
246      * @access public
247      * @return void
248      */
249     function removeEstilo($pos) {
250         array_splice($this->_estilos, $pos, 1);
251     }
252
253     /**
254      * Funcion que permite setear los estilos de uno o mas parrafos.
255      *
256      * @param mixed $pos Array o int que identifique la posicion de los parrafos.
257      * @param array $estilo Array de estilos.
258      *
259      * @access public
260      * @return void
261      */
262     function setEstilo($pos, $estilo) {
263         $this->_estilos[$pos] = $estilo;
264     }
265 }
266 ?>