]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/PDF/Texto.php
Sigo buscando el bug
[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      * Funcion que agrega el contenido del texto al PDF.
62      *
63      * @param &Object $MARCO MECON_PDF_Marco
64      *
65      * @return void
66      * @access public
67      */
68     function toPDF(&$MARCO) {
69         $alto = $MARCO->espacioDisponible;
70         if ($alto <= 0 ) {
71             $MARCO->newPage($MARCO->tamanio);               
72             $alto = $MARCO->espacioDisponible;
73         }
74         $ancho_pagina = $MARCO->getWidth($MARCO->orientacion);
75
76         for ($i=0; $i < count($this->_parrafos); $i++) {
77             if (@!$this->_estilos[$i]) {
78                 $this->_estilos[$i] = $this->_estilo_defecto;
79             }
80         
81             $txt = @$MARCO->wordWrap($this->_parrafos[$i], $ancho_pagina - 2,
82                     $this->_estilos[$i]);
83             
84             foreach ($txt as $t) {
85                 $alto -= $this->_estilos[$i]['height'];
86                 if ($alto <= 0) 
87                 {
88                     $MARCO->newPage($MARCO->tamanio);
89                     $alto = $MARCO->espacioDisponible;
90                 }
91
92                 if (@$this->_estilos[$i]['align'] == 'center') {
93                     $tam = @$MARCO->strlen($t, $this->_estilos[$i]);
94                     $init = ($ancho_pagina - $tam) / 2;
95                 }
96                 elseif (@$this->_estilos[$i]['align'] == 'right') {
97                     $tam = @$MARCO->strlen($t, $this->_estilos[$i]);
98                     $init = $ancho_pagina - $tam + 1;
99                 }
100                 else {
101                     $init = 0;
102                 }
103            
104
105                 $MARCO->addText($init, $alto + 2,
106                         $t, $this->_estilos[$i], null, $MARCO->orientacion);
107            
108
109             }
110         }
111         $MARCO->espacioDisponible = $alto;
112     }
113  
114     
115     /**
116      * Funcion que permite agregar parrafos al texto. Puede recibir un string
117      * con parrafos separados por \\n o un array con las mismas caracteristicas.
118      * Los estilos deben ser pasados dentro de un array, en donde a cada clave
119      * del array de contenido que se forme con el contenido le correspondera una
120      * clave del array de estilos. Existe la posibilidad de pasar solo un estilo
121      * y que este sea utilizado por todos los parrafos que se genere.
122      * 
123      * @param mixed $cont   Parrafos a agregar
124      * @param array $estilo Estilos de los parrafos.
125      *
126      * @access public
127      * @return void
128      */
129     function addContent($cont) {
130         if (is_string($cont)) {
131             $cont = split ("\n", $cont);
132         }
133         foreach ($cont as $c) {
134             //Me aseguro que lo que me pasen dentro del array de parrafos
135             //sean parrafos.
136             $c = split ("\n", $c); 
137             foreach ($c as $tmp) {
138                 $this->_parrafos[] = $tmp;
139             }
140         }
141     }
142
143     /**
144      * Funcion que permite remover parrafos del texto. Recibe el id del parrafo
145      * (posicion dentro del array de parrafos). Elimina tambien el estilo que
146      * este tiene asociado en el array de parrafos.
147      * 
148      * @param int $pos Posicion del parrafo a eliminar.
149      *
150      * @access public
151      * @return void
152      */
153     function removeContent($pos) {
154         array_splice($this->_parrafos, $pos, 1);
155         array_splice($this->_estilos, $pos, 1);
156     }
157     
158     /**
159      * Funcion que permite setear los parrafos al texto. Recibe el texto (array
160      * o string) a agregar y una posicion en donde en donde ponerlo (posicion
161      * del array de parrafos). Si no recibe un identificador del parrafo, borra
162      * el contenido actual y agrega solamente lo que se paso por parametro.
163      * Los estilos deben ser pasados dentro de un array, en donde a cada clave
164      * del array de contenido que se forme con el contenido le correspondera una
165      * clave del array de estilos. Existe la posibilidad de pasar solo un estilo
166      * y que este sea utilizado por todos los parrafos que se genere.
167      * 
168      * @param int $pos      Posicion del/los parrafo/s
169      * @param mixed $cont   Parrafos a agregar
170      *
171      * @access public
172      * @return void
173      */
174     function setContent($pos, $cont) {
175         if (is_string($cont)) {
176             $cont = split ("\n", $cont);
177         }
178         foreach ($cont as $c) {
179             //Me aseguro que lo que me pasen dentro del array de parrafos
180             //sean parrafos.
181             $c = split ("\n", $c); 
182             foreach ($c as $tmp) {
183                 $parrafos[] = $tmp;
184             }
185         }
186         $tmp = array_slice ($this->_parrafos, 0, $pos);
187         $tmp = array_merge ($tmp, $parrafos, array_slice ($this->_parrafos, 
188                     $pos));
189         $this->_parrafos = $tmp;
190     }
191   
192     /**
193      * Funcion que permite modificar los estilos de uno o mas parrafos.
194      *
195      * @param mixed $pos Array o int que identifique la posicion de los parrafos.
196      * @param array $estilo Array de estilos.
197      *
198      * @access public
199      * @return void
200      */
201     function updateEstilo($pos, $estilo) {
202        $this->_estilos[$pos]  = array_merge($this->_estilos[$pos], $estilo);
203     }
204     
205     /**
206      * Funcion que permite eliminar los estilos de uno o mas parrafos.
207      *
208      * @param mixed $pos Array o int que identifique la posicion de los parrafos.
209      *
210      * @access public
211      * @return void
212      */
213     function removeEstilo($pos) {
214         array_splice($this->_estilos, $pos, 1);
215     }
216
217     /**
218      * Funcion que permite setear los estilos de uno o mas parrafos.
219      *
220      * @param mixed $pos Array o int que identifique la posicion de los parrafos.
221      * @param array $estilo Array de estilos.
222      *
223      * @access public
224      * @return void
225      */
226     function setEstilo($pos, $estilo) {
227         $this->_estilos[$pos] = $estilo;
228     }
229 }
230 ?>