From: Martín Marrese Date: Mon, 10 Nov 2003 21:10:26 +0000 (+0000) Subject: MECON_PDF_Texto listo. X-Git-Tag: svn_import~188 X-Git-Url: https://git.llucax.com/mecon/meconlib.git/commitdiff_plain/409294316ffb829e4fb995ce023b7ca279204771?ds=sidebyside MECON_PDF_Texto listo. --- diff --git a/lib/MECON/PDF/Marco.php b/lib/MECON/PDF/Marco.php index ccd8c8b..7eccdd7 100644 --- a/lib/MECON/PDF/Marco.php +++ b/lib/MECON/PDF/Marco.php @@ -455,7 +455,7 @@ class MECON_PDF_Marco extends MECON_PDF { function addContent($contenido, $separador = true) { //Me aseguro de poner el separador siempre y cuando no sea el primer //objeto de la primer pagina. - if ($separador && $this->getPages()) { + if ($separador) { $this->_contenido[] = $this->_separador_defecto; } $this->_contenido[] = $contenido; diff --git a/lib/MECON/PDF/Tabla.php b/lib/MECON/PDF/Tabla.php index 73068cf..876c704 100644 --- a/lib/MECON/PDF/Tabla.php +++ b/lib/MECON/PDF/Tabla.php @@ -169,7 +169,7 @@ class MECON_PDF_Tabla extends MECON_PDF_Contenido { $this->_marco->newPage($this->_marco->tamanio); $alto = $this->_marco->espacioDisponible; } - //\@TODO Aca antes de crear una nueva pagina utilizar la que ya existe + $attr2 = $this->_obtenerAnchoColumnas(); for ($i = 0; $i < $this->_tabla->getRowCount(); $i++) { $max = 0; diff --git a/lib/MECON/PDF/Texto.php b/lib/MECON/PDF/Texto.php index 616229f..b108662 100644 --- a/lib/MECON/PDF/Texto.php +++ b/lib/MECON/PDF/Texto.php @@ -31,5 +31,200 @@ require_once 'MECON/PDF/Contenido.php'; */ class MECON_PDF_Texto extends MECON_PDF_Contenido { + /** + * Parrafos que componen el texto. + * @var array $parafos + * @access protected + */ + var $_parrafos = array(); + + /** + * Estilos PDF para cada parrafo. Entre los estilos pdf se debe encontrar + * aquel que defina la alineacion 'align' => center, left o right + * @var array $estilos + * @access protected + */ + var $_estilos = array(); + + /** + * Estilo estandar. + * @var array $estilo_defecto + * @access protected + */ + var $_estilo_defecto = array ( + 'font' => 'Helvetica-Bold', + 'height' => 8, + 'align' => 'left' + ); + + /** + * Funcion que agrega el contenido del texto al PDF. + * + * @param &Object $MARCO MECON_PDF_Marco + * + * @return void + * @access public + */ + function toPDF(&$MARCO) { + $alto = $MARCO->espacioDisponible; + if ($alto <= 0 ) { + $MARCO->newPage($MARCO->tamanio); + $alto = $MARCO->espacioDisponible; + } + $ancho_pagina = $MARCO->getWidth($MARCO->orientacion); + + for ($i=0; $i < count($this->_parrafos); $i++) { + if (@!$this->_estilos[$i]) { + $this->_estilos[$i] = $this->_estilo_defecto; + } + + $txt = @$MARCO->wordWrap($this->_parrafos[$i], $ancho_pagina - 2, + $this->_estilos[$i]); + + foreach ($txt as $t) { + $alto -= $this->_estilos[$i]['height']; + if ($alto <= 0) + { + $MARCO->newPage($MARCO->tamanio); + $alto = $MARCO->espacioDisponible; + } + + if (@$this->_estilos[$i]['align'] == 'center') { + $tam = @$MARCO->strlen($t, $this->_estilos[$i]); + $init = ($ancho_pagina - $tam) / 2; + } + elseif (@$this->_estilos[$i]['align'] == 'right') { + $tam = @$MARCO->strlen($t, $this->_estilos[$i]); + $init = $ancho_pagina - $tam + 1; + } + else { + $init = 0; + } + + + $MARCO->addText($init, $alto + 2, + $t, $this->_estilos[$i], null, $MARCO->orientacion); + + + } + } + $MARCO->espacioDisponible = $alto; + } + + + /** + * Funcion que permite agregar parrafos al texto. Puede recibir un string + * con parrafos separados por \\n o un array con las mismas caracteristicas. + * Los estilos deben ser pasados dentro de un array, en donde a cada clave + * del array de contenido que se forme con el contenido le correspondera una + * clave del array de estilos. Existe la posibilidad de pasar solo un estilo + * y que este sea utilizado por todos los parrafos que se genere. + * + * @param mixed $cont Parrafos a agregar + * @param array $estilo Estilos de los parrafos. + * + * @access public + * @return void + */ + function addContent($cont) { + if (is_string($cont)) { + $cont = split ("\n", $cont); + } + foreach ($cont as $c) { + //Me aseguro que lo que me pasen dentro del array de parrafos + //sean parrafos. + $c = split ("\n", $c); + foreach ($c as $tmp) { + $this->_parrafos[] = $tmp; + } + } + } + + /** + * Funcion que permite remover parrafos del texto. Recibe el id del parrafo + * (posicion dentro del array de parrafos). Elimina tambien el estilo que + * este tiene asociado en el array de parrafos. + * + * @param int $pos Posicion del parrafo a eliminar. + * + * @access public + * @return void + */ + function removeContent($pos) { + array_splice($this->_parrafos, $pos, 1); + array_splice($this->_estilos, $pos, 1); + } + + /** + * Funcion que permite setear los parrafos al texto. Recibe el texto (array + * o string) a agregar y una posicion en donde en donde ponerlo (posicion + * del array de parrafos). Si no recibe un identificador del parrafo, borra + * el contenido actual y agrega solamente lo que se paso por parametro. + * Los estilos deben ser pasados dentro de un array, en donde a cada clave + * del array de contenido que se forme con el contenido le correspondera una + * clave del array de estilos. Existe la posibilidad de pasar solo un estilo + * y que este sea utilizado por todos los parrafos que se genere. + * + * @param int $pos Posicion del/los parrafo/s + * @param mixed $cont Parrafos a agregar + * + * @access public + * @return void + */ + function setContent($pos, $cont) { + if (is_string($cont)) { + $cont = split ("\n", $cont); + } + foreach ($cont as $c) { + //Me aseguro que lo que me pasen dentro del array de parrafos + //sean parrafos. + $c = split ("\n", $c); + foreach ($c as $tmp) { + $parrafos[] = $tmp; + } + } + $tmp = array_slice ($this->_parrafos, 0, $pos); + $tmp = array_merge ($tmp, $parrafos, array_slice ($this->_parrafos, + $pos)); + $this->_parrafos = $tmp; + } + + /** + * Funcion que permite modificar los estilos de uno o mas parrafos. + * + * @param mixed $pos Array o int que identifique la posicion de los parrafos. + * @param array $estilo Array de estilos. + * + * @access public + * @return void + */ + function updateEstilo($pos, $estilo) { + $this->_estilos[$pos] = array_merge($this->_estilos[$pos], $estilo); + } + + /** + * Funcion que permite eliminar los estilos de uno o mas parrafos. + * + * @param mixed $pos Array o int que identifique la posicion de los parrafos. + * + * @access public + * @return void + */ + function removeEstilo($pos) { + array_splice($this->_estilos, $pos, 1); + } + + /** + * Funcion que permite setear los estilos de uno o mas parrafos. + * + * @param mixed $pos Array o int que identifique la posicion de los parrafos. + * @param array $estilo Array de estilos. + * + * @access public + * @return void + */ + function setEstilo($pos, $estilo) { + $this->_estilos[$pos] = $estilo; + } } ?> \ No newline at end of file diff --git a/test/PDF/test.php b/test/PDF/test.php index 2c0d365..9c34cb7 100755 --- a/test/PDF/test.php +++ b/test/PDF/test.php @@ -6,6 +6,7 @@ prepend_include_path('/home/mmarrese/public_html/meconlib/lib/'); require_once 'MECON/HTML/Tabla.php'; require_once 'MECON/PDF/Marco.php'; require_once 'MECON/PDF/Tabla.php'; +require_once 'MECON/PDF/Texto.php'; $TABLA =& new MECON_HTML_Tabla(); @@ -13,7 +14,7 @@ $TABLA->addRow(array ('1erCabecera', '2daCabecera para que la corete', '3erCabecera'), 'cabecera'); $TABLA->addRow(array ('1erColumna', '2daColumna para que la corete', '3erColumna'), 'clara'); -for ($i=0; $i<60; $i++) { +for ($i=0; $i<20; $i++) { if ($i == 50) { $TABLA->addRow(array ('1erColumna para gonzalo que lo mira por tv desde su casa en ayacucho 1593. Aunque ahora que lo pienso me estoy equivocando', '2daColumna 1erColumna para gonzalo que lo mira por tv desde su casa en ayacucho 1593. Aunque ahora que lo pienso me estoy equivocando FILA 50', '3erColumna1erColumna para gonzalo que lo mira por tv desde su casa en ayacucho 1593. Aunque ahora que lo pienso me estoy equivocando'), 'comun'); } @@ -32,12 +33,43 @@ $TABLA->updateCellAttributes(2,0, 'align="left"'); $TABLA->updateCellAttributes(2,1, 'align="center"'); $TABLA->updateCellAttributes(2,2, 'align="right"'); -$PDF_MARCO =& new MECON_PDF_Marco ('a4', 'portrait'); + +$PDF_TEXTO =& new MECON_PDF_Texto; + +$PDF_TEXTO->addContent(array ( + "Texto a la izquierda", + "Texto al centro", "Texto a la derecha")); + +$PDF_TEXTO->setEstilo(0, array ('font' => 'Helvetica-Bold', 'height' => 8, + 'align' => 'left')); +$PDF_TEXTO->setEstilo(1, array ('font' => 'Helvetica-Bold', 'height' => 8, + 'align' => 'center')); +$PDF_TEXTO->setEstilo(2, array ('font' => 'Helvetica-Bold', 'height' => 8, + 'align' => 'right')); + +$PDF_TEXTO->addContent("PARRAFO 1 -> Si se omite tamano, se suprime todo desde el desplazamiento hasta el final de la matriz. Si se especifica el tamano y es positivo, se suprimirán tantos elementos como se especifica. Si fuera negativo, el final de la porción eliminada estará a tantos elementos del final de la matriz. Truco: para eliminar todo desde el desplazamiento hasta el final de la matriz cuando también se especifica sustitucion,utilice como tamano.\nPARRAFO 2 ->Si se especifia la matriz de sustitucion, entonces los elementos suprimidos son reemplazados con los elementos de dicha matriz. Si los valores de desplazamiento y tamano son tales que nada es borrado, los elementos de la matriz sustitucion se insertarán en la posición indicada por el desplazamiento. Truco: si sólo se va a sustituir algo por un elemento nada más, no hace falta poner alrededor del mismo, salvo que dicho elemento sea una matriz en sí mismo."); + + +$PDF_TEXTO2 =& new MECON_PDF_Texto; +$PDF_TEXTO2->addContent("El jefe de Gobierno porteño, Aníbal Ibarra, advirtió que su gestión no otorgará beneficios a los piqueteros que durante el fin de semana último ocuparon un predio en el barrio de Palermo.\n Si uno privilegia la situación de irregularidad, es que ponemos patas para arriba a toda la sociedad, enfatizó Ibarra, quien advirtió que no avalará situaciones de fuerza por sobre lo que hacen cientos de miles de ciudadanos que pagan sus créditos y que se anotan (en planes) para viviendas, esperando a veces durante muchos años.\n En declaraciones periodísticas, Ibarra remarcó que no se puede obtener una vivienda ni autorización para construir viviendas sobre la presión y mucho menos sobre una situación de ilegalidad."); +$PDF_TEXTO2->setEstilo(1, array ('font' => 'Helvetica-Bold', 'height' => 8, + 'align' => 'center')); +$PDF_TEXTO2->setEstilo(0, array ('font' => 'Helvetica-Bold', 'height' => 8, + 'align' => 'right')); + +//print '
MARTIN FIN 
'; + +$PDF_MARCO =& new MECON_PDF_Marco ('a4', 'landscape'); $PDF_MARCO->seccion = 'Prueba de la libreria de PDF\'s'; $PDF_MARCO->titulo = 'Alberto Giordano'; $PDF_MARCO->subtitulo = 'Filosofo Estilista, guacho pulenta si los hay'; $PDF_MARCO->addContent(new MECON_PDF_Tabla ($TABLA), false); +$PDF_MARCO->addContent($PDF_TEXTO, false); +$PDF_MARCO->addContent($PDF_TEXTO2, true); +$PDF_MARCO->addContent($PDF_TEXTO2, true); +$PDF_MARCO->addContent($PDF_TEXTO2, true); +$PDF_MARCO->addContent(new MECON_PDF_Tabla ($TABLA), true); $PDF_MARCO->display();