domingo, 29 de marzo de 2009

Manual de PHP 67. PDF. Añadir nuevas fuentes para PDF

Programas necesarios
Para generar las nuevas fuentes es necesario disponer del programa ttf2pt1.exe. Si accedemos a este enlace podemos ver, en la zona de descargas, una opción dónde dice Complete package, except sources desde el que podemos descargar el fichero ttf2pt1-3.4.4.exe.

Al ejecutar este instalador, con la opción por defecto, nos creará un directorio llamado GnuWin32 (en Archivos de Programa) dentro del cual encontramos un directorio llamado bin en el que se encuentra el ejectuable ttf2pt1.

El resto de las opciones de esta distribución no son necesarias para nuestros fines.

Creación del fichero .afm

Este fichero, cuya extensión es el acrónimo de Adobe Font Metric contiene las información sobre ancho, alto y kerning de cada carácter de una fuente.

El primer paso ha de ser la creación de ese fichero. El procedimiento para hacerlo es el que tienes descrito al margen.
¡Cuidado!

En el directorio fuentes tienes los ficheros cayge.afm y caygr.afm generados según el proceso descrito al margen.

Definición de las fuentes

El directorio fontsPDF de estos materiales (recuerda que es el fruto de renombrar el directorio font extraido del fichero de instalación de la clase FPDF) contiene otro subdirectorio (makefont) que incluye un script llamado makefont.php. La definición de fuentes requiere la ejecuación de una de las funciones que contiene ese script llamada MakeFont() y que utiliza los siguientes parámetros:

MakeFont(f1, f2, c, p, tipo)

donde f1 es el nombre y path de la fuente TrueType a utilizar (fichero .ttf), f2 es el nombre del fichero .afm creado para esta misma fuente mediante ttf2pt1. Estos dos parámetros son obligatorios.

Mediante el parámetro c (opcional) se especifica el tipo de codificación (el mapa de fuentes a utilizar). Si no se indica el valor por defecto sería cp1252.

El parámetro opcional c permite cambiar la codificación de algunos caracteres, y, mediante tipo puede indicarse el tipo de fuente original (por defecto se asigna TrueType).

La definición de nuevas fuentes requiere la ejecución de la función MakeFont. Para ello, una de las opciones, es utilizar un script como el que ves a la derecha. En una primera instrucción se incluye el fichero makefont.php y en la segunda se hace una llamada a la función únicamente con los parámetros obligatorios.

La ejecución de ese script daría como resultado la creación de dos ficheros con el mismo nombre. Uno de ellos con extensión .z y el otro con extensión .php. Ambos, para que puedan ser usados por la clase FPDF, deberán ser incluidos en el directorio fontsPDF.

Diferentes tipografías

Lo habitual es que entre las fuentes TrueType de un tipo determinado existan varios ficheros. Uno para la fuente normal, otro para la cursiva, etcétera. Cuando se trabaja con este tipo de fuentes y se pretende usar estilos distintos lo aconsejable es definir una fuente para cada tipo y tratarlos, a la hora de escribir el código de los script como fuentes independientes.

De esta forma podríamos tener parejas de ficheros del estilo: fxx_normal.z y fxx_normal.php; fxx_cursiva.z y fxx_cursiva.php, etcétera. A la hora de utilizarlas se haría como si se tratara de fuentes de distintas familias y habría de evitarse incluir el estilo en SetFont.

La sintaxis de la asignación de fuentes habría de ser:

$obj->SetFont("nombre","", 9);

dejando el valor del segundo parámetro (estilo) como una cadena vacía. La única excepción a esta norma sería el caso del subrayadado que no requiere otra cosa que asignar el valor U al parámetro estilo.

Precauciones con las fuentes

El uso de fuentes externas puede producir efectos indeseados si, por alguna circunstancia, tal como ocurre en los ejemplos la fuente utilizada carece de alguno carácteres (eñes, letras con tilde, símbolos). Conviene tenerlo en cuenta para evitar que la elección de una tipografía pueda afectar a los contenidos del documento.



Proceso de generación de fuentes



Esta primera imagen es la visualización del directorio fuentes de estos materiales. Podrás observar que contiene fuentes TrueType y el ejecutable ttf2pt1.


Hemos incluido dos fuentes TrueType llamadas bobcayge.ttf y bobcaygr.ttf. Serán las que utilizaremos para añadir nuevas opciones de fuentes a nuestros PDF's.





No es necesario que realices la instalación de ttf2pt1-3.4.4.exe comentada al margen. En el subdirectorio fuentes de estos materiales ya dispones del fichero ttf2pt1.

Creación del fichero .afm


Desde la ventana de MS-DOS y una vez elegido el directorio que contiene el ejecutable ttf2pt1 podemos crear el fichero .afm usando la siguiente sintaxis:


ttf2pt1 -anombre_de_la_fuente_TrueType.ttf nombre_del_nuevo_fichero




Nos generará dos ficheros con el nombre asignado al nuevo fichero y extensiones .afm y .t1a tal como puedes ver en la imagen.




Creación del fichero de definición de fuente


Este es un ejemplo de script que permitiría definir nuevas fuentes mediante la utilidad makefont.

<?
# incluimos el fichero makefont.php que está
# en la ruta que se especifica (si lo tuvieramos en otra
# ubicación bastaría cambiar el path del include
include("c:/Apache/htdocs/cursoPHP/fontsPDF/
makefont/makefont.php");

# ejecutamos la función MakeFont indicando como parametros
# la ruta y el fichero ttf a convertir(la fuente trueType)
# y como segundo parámetro la ruta y el nombre del fichero afm
# creado en el proceso anterior
MakeFont("c:/Apache/htdocs/cursoPHP/fuentes/bobcaygr.ttf",
"c:/Apache/htdocs/cursoPHP/fuentes/caygr.afm");

?>


Al ejecutar el script anterior puede ocurrir que, dependiendo de la fuente ttf que estemos utilizando, aparezcan mensajes de advertencia como los que ves en esta imagen.




Significaría que algunos tipos (generalmente los asociados a los caracteres ASCII ampliados) no estarían disponibles y que, en consecuencia, o no se visualizarían o se visualizarían de forma incorrecta.


Una vez creados los ficheros como las nuevas fuentes es necesario incluirlos en el directorio fontsPDF de modo que estén disponibles a la hora de crear los documentos PDF.



Ejemplo de utilización


La utilización de nuevas fuentes requiere que


objeto->AddFont(nombre_a_utilizar, estilo, fichero_fuente.php)


donde el nombre_a_utilizar puede ser cualquiera, el parámetro estilo puede ser la cadena vacía y el tercer parámetro es el nombre y extensión del fichero .php que contiene la definición de la fuente y que fué creado por medio de makefont.


Si se omite el tercer parámetro será asignado, de forma automática, la cadena formada por la unión las cadenas nombre_a_utilizar y estilo, agregándole la extensión .php.

<?
#incluimos el fichero con la clase y definimos la variable FPDF_FONTPATH
# con el mismo criterio comentado en el ejemplo anterior
include("fpdf.php");
define('FPDF_FONTPATH','c:/Apache/htdocs/cursoPHP/fontsPDF/');

/* establecemos las dimensiones del documento
creamos un nuevo objeto y añadimos una página*/
$dimensiones=array (140,200);
$MiPDF=new FPDF('P','mm',$dimensiones);

# ajustamos al 100% la visualización
$MiPDF->SetDisplayMode('real');
#insertamos una página en blanco
$MiPDF->Addpage();
# establecemos el color de la letra
$MiPDF->SetTextColor(255,0,0);
# añadimos la nueva fuente. Podemos ponerle un nombre cualquiera
# Al no incluir estilo considerará el estilo normal
$MiPDF->AddFont('fuentenueva1','','cayge.php');
# a indicar SetFont habremos de utilizar el mismo nombre de fuente
# establecido mediante AddFont
$MiPDF->SetFont('fuentenueva1','',24);
$MiPDF->Multicell(0,10,"Prueba de la fuente que hemos
llamado fuente nueva1",1,'L',0);
$MiPDF->Ln(10);

# incluimos la fuente caygr.php con nombre fuentenueva2
$MiPDF->AddFont('fuentenueva2','','caygr.php');
$MiPDF->SetFont('fuentenueva2','',24);
>
$MiPDF->Multicell(0,10,"Prueba de la fuente que hemos
llamado fuente nueva2",1,'R',0);
$MiPDF->Output();
?>
EJEMPLO144

En estos dos ejemplos pueden verse los resultados -con algunos problemas gráficos- de la sustitución de las fuentes en algunos de los ejemplos de páginas anteriores.

ejemplo145.php ejemplo146.php




Fuente:

No hay comentarios: