A�adiendo nuevas fuentes y codificaciones

Este tutorial explica c�mo usar fuentes TrueType, OpenType y Type1 de forma que usted no se vea limitado a las fuentes incorporadas en FPDF. El otro punto de inter�s es que pueda elegir la codificaci�n de la fuente, lo que le permitir� usar otros idiomas aparte de los europeos occidentales (ya que las fuentes est�ndar tienen muy pocos caracteres disponibles).

Para OpenType, s�lo es compatible el formato basado en TrueType (no as� el basado en el Type1).
Para Type1, es necesario el archivo AFM correspondiente. Por lo general, �ste es prove�do con la fuente.

A�adir una nueva fuente requiere dos pasos:

Generaci�n del fichero de definici�n de la fuente

El primer paso consiste en generar un fichero PHP que contenga toda la informaci�n que necesita FPDF; adem�s, el fichero de la fuente deber� comprimirse. Para hacer esto, se distribuye un script auxiliar en el directorio makefont del paquete: makefont.php. Contiene la siguiente funci�n:

MakeFont(string fontfile [, string enc [, boolean embed [, boolean subset]]])
fontfile

Ubicaci�n del fichero .ttf, .otf o .pfb.

enc

Nombre de la codificaci�n. Valor por defecto: cp1252.

embed

Si se incorpora o no la fuente. Valor por defecto: true.

subset

Si un subconjunto de la fuente o no. Valor por defecto: true.

El primer par�metro es el nombre del fichero de la fuente. La extensi�n debe ser .ttf, .otf o .pfb y determina el tipo de fuente. Si tiene una fuente Type1 en formato ASCII (.pfa), puede convertirla a formato binario (.pfb) con t1utils.

Para las fuentes Type1, el archivo .afm correspondiente debe estar presente en el mismo directorio.

La codificaci�n define la asociaci�n entre un c�digo (de 0 a 255) y un car�cter. Los primeros 123 son fijos y se corresponden con los caracteres ASCII; los siguientes son variables. Las codificaciones se almacenan en ficheros .map. Est�n disponibles: Por supuesto, la fuente debe contener los caracteres adecuados a la codificaci�n escogida.

Existen dos formas de usar una nueva fuente: incluirla en el PDF o no. Cuando una fuente no se incluye, se busca en el sistema. La ventaja es que el fichero PDF es m�s peque�o; sin embargo, si la fuente no est� disponible en el sistema, se usa otra como sustituta. As� que es aconsejable asegurarse de que la fuente en cuesti�n est� instalada en los sistemas de los clientes. Si el fichero est� destinado a una audiencia numerosas, es mejor incluir la fuente.

El �ltimo par�metro indica si el subconjunto deber ser usado o no, es decir, si o no, los caracteres del m�todo de codificado deben mantenerse en la fuente embebida. Como consecuencia, si la fuente original fue grande, el tama�o del archivo PDF puede ser altamente reducido.

Despu�s de llamar a la funci�n (puede crear un nuevo fichero e incluir makefont.php), se crear� un fichero .php con el mismo nombre que la fuente. Puede renombrarlo si lo desea. En caso de incluir la fuente, el fichero se comprime y da lugar a un segundo fichero con extensi�n .z (excepto si la funci�n de compresi�n no est� disponible, puesto que requiere la biblioteca Zlib para PHP). Tambi�n puede renombrarlo, pero, en este caso, tendr� que modificar la variable $file en el fichero .php consecuentemente.

Ejemplo:
<?php
require_once('makefont/makefont.php');

MakeFont('c:\\Windows\\Fonts\\comic.ttf','cp1252');
?>
que devuelve los ficheros comic.php y comic.z.

Entonces tendr� que copiar los ficheros generados en el directorio de fuentes. Si el fichero de la fuente no pudo ser comprimido, copie la fuente en lugar del .z.

Otra forma de invocar a MakeFont() es a trav�s de la l�nea de comandos:

php makefont\makefont.php c:\Windows\Fonts\comic.ttf cp1252

Por �ltimo, para las fuentes TrueType y OpenType, tambi�n puede generar los archivos en l�nea en lugar de hacerlo manualmente.

Declaraci�n de la fuente en el script

El segundo paso es el m�s simple. S�lo necesita llamar al m�todo AddFont():
$pdf->AddFont('Comic','','comic.php');
?>
Y la fuente queda disponible (en los estilos normal y subrayado), lista para usar como las otras. Si hubi�ramos trabajado con la Comic Sans MS Bold (comicbd.ttf), hubi�semos escrito:
$pdf->AddFont('Comic','B','comicbd.php');
?>

Ejemplo

Veamos ahora un ejemplo completo. Vamos a utilizar la fuente Calligrapher. El primer paso es la generaci�n de los archivos de la fuente:
<?php
require_once('makefont/makefont.php');

MakeFont('calligra.ttf','cp1252');
?>
El script nos devolver� el siguiente informe:

Warning: character Euro is missing
Warning: character zcaron is missing
Font file compressed: calligra.z
Font definition file generated: calligra.php

El car�cter del euro no est� en la fuente (es muy antigua). Otro car�cter tampoco se encuentra en la fuente.

Alternativamente, podr�amos haber utilizado la l�nea de comandos:

php makefont\makefont.php calligra.ttf cp1252

o haber usado el generado en l�nea.

Podemos copiar estos dos ficheros en el directorio de fuentes (font) y escribir el script:
<?php
require_once('fpdf.php');

$pdf = new FPDF();
$pdf->AddFont('Calligrapher','','calligra.php');
$pdf->AddPage();
$pdf->SetFont('Calligrapher','',35);
$pdf->Write(10,'Enjoy new fonts with FPDF!');
$pdf->Output();
?>

[Demo]