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: jue nov 6 16:13:38 ART 2003
22 Autor: Martin Marrese <mmarre@mecon.gov.ar>
23 -------------------------------------------------------------------------------
25 -----------------------------------------------------------------------------*/
27 require_once 'MECON/PDF/Contenido.php';
30 * Libreria de texto en PDF.
32 class MECON_PDF_Texto extends MECON_PDF_Contenido {
35 * Parrafos que componen el texto.
39 var $_parrafos = array();
42 * Estilos PDF para cada parrafo. Entre los estilos pdf se debe encontrar
43 * aquel que defina la alineacion 'align' => center, left o right
47 var $_estilos = array();
51 * @var array $estilo_defecto
54 var $_estilo_defecto = array (
55 'font' => 'Helvetica-Bold',
61 * Orientacion de las nuevas paginas
62 * @var string $orientacion
68 * Indica si el encabezado debe ir en la nuevas paginas.
69 * @var bool $encabezado
77 * @param string $orientacion Orientacion que tendran las nuevas paginas que
79 * @param bool $encabezado Indica si las paginas nuevas que genere esta
80 * clase tendran el encabezado de MECON_PDF_Marco.
85 function MECON_PDF_Texto($orientacion = null, $encabezado = true) {
86 $this->_orientacion = $orientacion;
87 $this->_encabezado = $encabezado;
91 * Funcion que se encarga de crear las nuevas paginas.
93 * @param &Object $MARCO MECON_PDF_Marco
98 function _newPage(&$MARCO) {
99 $tmp = ($this->_orientacion) ? $this->_orientacion :
100 $MARCO->getOrientation();
101 $MARCO->newPage($MARCO->tamanio, $tmp, $this->_encabezado);
105 * Funcion que agrega el contenido del texto al PDF.
107 * @param &Object $MARCO MECON_PDF_Marco
112 function toPDF(&$MARCO) {
113 $alto = $MARCO->espacioDisponible;
115 $this->_newPage($MARCO);
116 $alto = $MARCO->espacioDisponible;
119 $ancho_pagina = $MARCO->getWidth($MARCO->refPage(),$MARCO->getOrientation());
120 $orientacion = $MARCO->getOrientation();
122 for ($i=0; $i < count($this->_parrafos); $i++) {
123 if (@!$this->_estilos[$i]) {
124 $this->_estilos[$i] = $this->_estilo_defecto;
127 $txt = @$MARCO->wordWrap($this->_parrafos[$i], $ancho_pagina - 2,
128 $this->_estilos[$i]);
130 foreach ($txt as $t) {
131 $alto -= $this->_estilos[$i]['height'];
134 $this->_newPage($MARCO);
135 $alto = $MARCO->espacioDisponible;
138 if (@$this->_estilos[$i]['align'] == 'center') {
139 $tam = @$MARCO->strlen($t, $this->_estilos[$i]);
140 $init = ($ancho_pagina - $tam) / 2;
142 elseif (@$this->_estilos[$i]['align'] == 'right') {
143 $tam = @$MARCO->strlen($t, $this->_estilos[$i]);
144 $init = $ancho_pagina - $tam + 1;
151 $MARCO->addText($init, $alto + 2,
152 $t, $this->_estilos[$i], null, $orientacion);
157 $MARCO->espacioDisponible = $alto;
162 * Funcion que permite agregar parrafos al texto. Puede recibir un string
163 * con parrafos separados por \\n o un array con las mismas caracteristicas.
164 * Los estilos deben ser pasados dentro de un array, en donde a cada clave
165 * del array de contenido que se forme con el contenido le correspondera una
166 * clave del array de estilos. Existe la posibilidad de pasar solo un estilo
167 * y que este sea utilizado por todos los parrafos que se genere.
169 * @param mixed $cont Parrafos a agregar
170 * @param array $estilo Estilos de los parrafos.
175 function addContent($cont) {
176 if (is_string($cont)) {
177 $cont = split ("\n", $cont);
179 foreach ($cont as $c) {
180 //Me aseguro que lo que me pasen dentro del array de parrafos
182 $c = split ("\n", $c);
183 foreach ($c as $tmp) {
185 $this->_parrafos[] = $tmp;
188 $this->_parrafos[] = ' ';
195 * Funcion que permite remover parrafos del texto. Recibe el id del parrafo
196 * (posicion dentro del array de parrafos). Elimina tambien el estilo que
197 * este tiene asociado en el array de parrafos.
199 * @param int $pos Posicion del parrafo a eliminar.
204 function removeContent($pos) {
205 array_splice($this->_parrafos, $pos, 1);
206 array_splice($this->_estilos, $pos, 1);
210 * Funcion que permite setear los parrafos al texto. Recibe el texto (array
211 * o string) a agregar y una posicion en donde en donde ponerlo (posicion
212 * del array de parrafos). Si no recibe un identificador del parrafo, borra
213 * el contenido actual y agrega solamente lo que se paso por parametro.
214 * Los estilos deben ser pasados dentro de un array, en donde a cada clave
215 * del array de contenido que se forme con el contenido le correspondera una
216 * clave del array de estilos. Existe la posibilidad de pasar solo un estilo
217 * y que este sea utilizado por todos los parrafos que se genere.
219 * @param int $pos Posicion del/los parrafo/s
220 * @param mixed $cont Parrafos a agregar
225 function setContent($pos, $cont) {
226 if (is_string($cont)) {
227 $cont = split ("\n", $cont);
229 foreach ($cont as $c) {
230 //Me aseguro que lo que me pasen dentro del array de parrafos
232 $c = split ("\n", $c);
233 foreach ($c as $tmp) {
237 $tmp = array_slice ($this->_parrafos, 0, $pos);
238 $tmp = array_merge ($tmp, $parrafos, array_slice ($this->_parrafos,
240 $this->_parrafos = $tmp;
244 * Funcion que permite modificar los estilos de uno o mas parrafos.
246 * @param mixed $pos Array o int que identifique la posicion de los parrafos.
247 * @param array $estilo Array de estilos.
252 function updateEstilo($pos, $estilo) {
253 if (@$this->_estilos[$pos]) {
254 $this->_estilos[$pos] = array_merge($this->_estilos[$pos], $estilo);
257 $this->setEstilo($pos, array_merge($this->_estilo_defecto, $estilo));
262 * Funcion que permite eliminar los estilos de uno o mas parrafos.
264 * @param mixed $pos Array o int que identifique la posicion de los parrafos.
269 function removeEstilo($pos) {
270 array_splice($this->_estilos, $pos, 1);
274 * Funcion que permite setear los estilos de uno o mas parrafos.
276 * @param mixed $pos Array o int que identifique la posicion de los parrafos.
277 * @param array $estilo Array de estilos.
282 function setEstilo($pos, $estilo) {
283 $this->_estilos[$pos] = $estilo;
287 * Funcion que devuelve el numero de parrafos que hay cargados.
292 function cantParrafos() {
293 return count($this->_parrafos);