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: ñ 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
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.
Septiembre 13, 2009 a las 12:03 am |
Hice lo que sugieres pero igual no se justica el texto cuando tiene tildes.
Septiembre 13, 2009 a las 12:51 am |
Escribe bien el problema, con algo de código, para ayudar.
Septiembre 13, 2009 a las 12:51 am |
Tengo documentos con este método y funcionan.
Hay que hacer un decode al texto.