Justificación de texto en PDF con R&OS


La creación de PDF con esta sencilla clase R&OS para PHP es excelente, fácil, y permite dibujar figuras geométricas, crear índices y anexar imágenes (hay mas utilidades incluidas pero estas son las que yo más uso), el problema con esta clase es que el autor no pensó en los usuarios que no tienen codificación de caracteres ASCII y por eso si los PDF tienen tildes estos no se mostrarán, y si consigues hacerlos imprimir queda el problema que la justificación de párrafos sale mal acomodada.

$pdf = new Creport('letter','portrait');
$pdf->ezSetCmMargins(2.5,2.5,2.5,2.5);
$pdf->selectFont('fonts/Times-Roman.afm');
$pdf->ezText('Hola Mundo');
$pdf->ezStream();

Un ejemplo tipico.

El la FAQ del autor da una solución  que implementó, fue de reemplazar los caracteres por una codificación nueva y da como ejemplo la codificación alemana.

$diff=array(196=>'Adieresis',228=>'adieresis',
214=>'Odieresis',246=>'odieresis',
220=>'Udieresis',252=>'udieresis',
223=>'germandbls');
// and the first time that you call selectFont for each font, use
$pdf->selectFont('<fontname>',array('encoding'=>'WinAnsiEncoding','differences'=>$diff));

Como loco busque en internet cual era la codificación para el español y no la encontré, ya desesperado se me ocurrió buscar en el mapa de caracteres de Gnome y encontré las respuesta, sin ir tan lejos, selecciono el tipo de fuente, grupo latino y busco el carácter que deseo remplazar, el numero necesario es: Entidad decimal XML: &#241; omitimos los demás caracteres y tomamos solo el número, lo agregamos a nuestra matriz de remplazo y listo, justificación asegurada.

Ventana del Mapa de Caracteres

Ventana del Mapa de Caracteres

Ahora el código debería ser de la siguiente manera

$pdf = new Creport('letter','portrait');
$pdf->ezSetCmMargins(2.5,2.5,2.5,2.5);
$diff=array(225=>'aacute',233=>'eacute',
            237=>'iacute',243=>'oacute',
            250=>'uacute',252=>'udieresis',
            241=>'ntilde',209=>'Ntilde');

$pdf->selectFont('fonts/Times-Roman.afm',array('encoding'=>'WinAnsiEncoding','differences'=>$diff));
$pdf->ezText(utf8_decode('Hola Mundo'));
$pdf->ezStream();

Nota: se debe usar utf8_decode() para cada conjunto de texto que se desee imprimir.

Espero que sea de ayuda a muchas personas que alrededor del mundo preguntaron pero que nunca vieron una respuesta.

About these ads

5 pensamientos en “Justificación de texto en PDF con R&OS

  1. Gracias man 2 noches de desvelo probando que podia ser, hasta que llegue a la conclusion que eran las tildes solo copie los parametros extra al select font y todo salió perfecto.
    Muchas Gracias.

  2. Pingback: Los números de 2010 « Vida Np

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s