1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
4 -------------------------------------------------------------------------------
5 This file is part of mlib.
7 mlib is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2 of the License, or (at your option)
12 mlib is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License; if not,
17 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18 Boston, MA 02111-1307 USA
19 -------------------------------------------------------------------------------
20 Creado: jue nov 6 16:13:38 ART 2003
21 Autor: Martin Marrese <mmarre@mecon.gov.ar>
22 -------------------------------------------------------------------------------
24 -----------------------------------------------------------------------------*/
26 require_once 'MLIB/PDF/Contenido.php';
29 * Libreria de texto en PDF.
31 class MLIB_PDF_Texto extends MLIB_PDF_Contenido {
34 * Parrafos que componen el texto.
38 var $_parrafos = array();
41 * Estilos PDF para cada parrafo. Entre los estilos pdf se debe encontrar
42 * aquel que defina la alineacion 'align' => center, left o right
46 var $_estilos = array();
50 * @var array $estilo_defecto
53 var $_estilo_defecto = array (
54 'font' => 'Helvetica-Bold',
60 * Orientacion de las nuevas paginas
61 * @var string $orientacion
67 * Indica si el encabezado debe ir en la nuevas paginas.
68 * @var bool $encabezado
76 * @param string $orientacion Orientacion que tendran las nuevas paginas que
78 * @param bool $encabezado Indica si las paginas nuevas que genere esta
79 * clase tendran el encabezado de MLIB_PDF_Marco.
84 function MLIB_PDF_Texto($orientacion = null, $encabezado = true) {
85 $this->_orientacion = $orientacion;
86 $this->_encabezado = $encabezado;
90 * Funcion que se encarga de crear las nuevas paginas.
92 * @param &Object $MARCO MLIB_PDF_Marco
97 function _newPage(&$MARCO) {
98 $tmp = ($this->_orientacion) ? $this->_orientacion :
99 $MARCO->getOrientation();
100 $MARCO->newPage($MARCO->tamanio, $tmp, $this->_encabezado);
104 * Funcion que agrega el contenido del texto al PDF.
106 * @param &Object $MARCO MLIB_PDF_Marco.
111 function toPDF(&$MARCO) {
112 $alto = $MARCO->espacioDisponible;
114 $this->_newPage($MARCO);
115 $alto = $MARCO->espacioDisponible;
118 $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation());
119 $orientacion = $MARCO->getOrientation();
121 for ($i=0; $i < count($this->_parrafos); $i++) {
122 if (@!$this->_estilos[$i]) {
123 $this->_estilos[$i] = $this->_estilo_defecto;
126 $txt = @$MARCO->wordWrap($this->_parrafos[$i], $ancho_pagina - 2,
127 $this->_estilos[$i]);
129 foreach ($txt as $t) {
130 $alto -= $this->_estilos[$i]['height'];
133 $this->_newPage($MARCO);
134 $alto = $MARCO->espacioDisponible;
137 if (@$this->_estilos[$i]['align'] == 'center') {
138 $tam = @$MARCO->strlen($t, $this->_estilos[$i]);
139 $init = ($ancho_pagina - $tam) / 2;
141 elseif (@$this->_estilos[$i]['align'] == 'right') {
142 $tam = @$MARCO->strlen($t, $this->_estilos[$i]);
143 $init = $ancho_pagina - $tam + 1;
149 $MARCO->addText($init, $alto + 2,
150 $t, $this->_estilos[$i], null, $orientacion);
153 $MARCO->espacioDisponible = $alto;
158 * Funcion que permite agregar parrafos al texto. Puede recibir un string
159 * con parrafos separados por \\n o un array con las mismas caracteristicas.
160 * Los estilos deben ser pasados dentro de un array, en donde a cada clave
161 * del array de contenido que se forme con el contenido le correspondera una
162 * clave del array de estilos. Existe la posibilidad de pasar solo un estilo
163 * y que este sea utilizado por todos los parrafos que se genere.
165 * @param mixed $cont Parrafos a agregar
166 * @param array $estilo Estilos de los parrafos.
171 function addContent($cont) {
172 if (is_string($cont)) {
173 $cont = split ("\n", $cont);
175 foreach ($cont as $c) {
176 //Me aseguro que lo que me pasen dentro del array de parrafos
178 $c = split ("\n", $c);
179 foreach ($c as $tmp) {
181 $this->_parrafos[] = $tmp;
184 $this->_parrafos[] = ' ';
191 * Funcion que permite remover parrafos del texto. Recibe el id del parrafo
192 * (posicion dentro del array de parrafos). Elimina tambien el estilo que
193 * este tiene asociado en el array de parrafos.
195 * @param int $pos Posicion del parrafo a eliminar.
200 function removeContent($pos) {
201 array_splice($this->_parrafos, $pos, 1);
202 array_splice($this->_estilos, $pos, 1);
206 * Funcion que permite setear los parrafos al texto. Recibe el texto (array
207 * o string) a agregar y una posicion en donde en donde ponerlo (posicion
208 * del array de parrafos). Si no recibe un identificador del parrafo, borra
209 * el contenido actual y agrega solamente lo que se paso por parametro.
210 * Los estilos deben ser pasados dentro de un array, en donde a cada clave
211 * del array de contenido que se forme con el contenido le correspondera una
212 * clave del array de estilos. Existe la posibilidad de pasar solo un estilo
213 * y que este sea utilizado por todos los parrafos que se genere.
215 * @param int $pos Posicion del/los parrafo/s
216 * @param mixed $cont Parrafos a agregar
221 function setContent($pos, $cont) {
222 if (is_string($cont)) {
223 $cont = split ("\n", $cont);
225 foreach ($cont as $c) {
226 //Me aseguro que lo que me pasen dentro del array de parrafos
228 $c = split ("\n", $c);
229 foreach ($c as $tmp) {
233 $tmp = array_slice ($this->_parrafos, 0, $pos);
234 $tmp = array_merge ($tmp, $parrafos, array_slice ($this->_parrafos,
236 $this->_parrafos = $tmp;
240 * Funcion que permite modificar los estilos de uno o mas parrafos.
242 * @param mixed $pos Array o int que identifique la posicion de los parrafos.
243 * @param array $estilo Array de estilos.
248 function updateEstilo($pos, $estilo) {
249 if (@$this->_estilos[$pos]) {
250 $this->_estilos[$pos] = array_merge($this->_estilos[$pos], $estilo);
253 $this->setEstilo($pos, array_merge($this->_estilo_defecto, $estilo));
258 * Funcion que permite eliminar los estilos de uno o mas parrafos.
260 * @param mixed $pos Array o int que identifique la posicion de los parrafos.
265 function removeEstilo($pos) {
266 array_splice($this->_estilos, $pos, 1);
270 * Funcion que permite setear los estilos de uno o mas parrafos.
272 * @param mixed $pos Array o int que identifique la posicion de los parrafos.
273 * @param array $estilo Array de estilos.
278 function setEstilo($pos, $estilo) {
279 $this->_estilos[$pos] = $estilo;
283 * Devuelve el array de estilos o uno en particular.
285 * @param int $pos NĂºmero parrafo.
290 function getEstilo($pos = null) {
292 return $this->_estilos[$pos];
295 return $this->_estilos;
300 * Devuelve el estilo por defecto.
305 function getEstiloDefecto() {
306 return $this->_estilo_defecto;
310 * Funcion que devuelve el numero de parrafos que hay cargados.
315 function cantParrafos() {
316 return count($this->_parrafos);
320 * Devuelve el array de parrafos
325 function getParrafos() {
326 return $this->_parrafos;