190 lines
8.7 KiB
HTML
190 lines
8.7 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
|
<title>Añadiendo nuevas fuentes y codificaciones</title>
|
|
<link type="text/css" rel="stylesheet" href="../fpdf.css">
|
|
</head>
|
|
<body>
|
|
<h1>Añadiendo nuevas fuentes y codificaciones</h1>
|
|
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).
|
|
<br>
|
|
<br>
|
|
Para OpenType, sólo es compatible el formato basado en TrueType (no así el basado en el Type1).<br>
|
|
Para Type1, es necesario el archivo AFM correspondiente. Por lo general, éste es proveído con la fuente.
|
|
<br>
|
|
<br>
|
|
Añadir una nueva fuente requiere dos pasos:
|
|
<ul>
|
|
<li>Generación del fichero de definición de la fuente</li>
|
|
<li>Declaración de la fuente en el script</li>
|
|
</ul>
|
|
|
|
<h2>Generación del fichero de definición de la fuente</h2>
|
|
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:
|
|
<br>
|
|
<br>
|
|
<code>MakeFont(<b>string</b> fontfile [, <b>string</b> enc [, <b>boolean</b> embed [, <b>boolean</b> subset]]])</code>
|
|
<dl class="param" style="margin-bottom:2em">
|
|
<dt><code>fontfile</code></dt>
|
|
<dd>
|
|
<p>Ubicación del fichero .ttf, .otf o .pfb.</p>
|
|
</dd>
|
|
<dt><code>enc</code></dt>
|
|
<dd>
|
|
<p>Nombre de la codificación. Valor por defecto: <code>cp1252</code>.</p>
|
|
</dd>
|
|
<dt><code>embed</code></dt>
|
|
<dd>
|
|
<p>Si se incorpora o no la fuente. Valor por defecto: <code>true</code>.</p>
|
|
</dd>
|
|
<dt><code>subset</code></dt>
|
|
<dd>
|
|
<p>Si un subconjunto de la fuente o no. Valor por defecto: <code>true</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
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 <a href="http://www.lcdf.org/~eddietwo/type/#t1utils" target="_blank">t1utils</a>.
|
|
<br>
|
|
<br>
|
|
Para las fuentes Type1, el archivo .afm correspondiente debe estar presente en el mismo directorio.
|
|
<br>
|
|
<br>
|
|
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:
|
|
<ul>
|
|
<li>cp1250 (Europa Central)</li>
|
|
<li>cp1251 (cirílico)</li>
|
|
<li>cp1252 (Europa Occidental)</li>
|
|
<li>cp1253 (griego)</li>
|
|
<li>cp1254 (turco)</li>
|
|
<li>cp1255 (hebreo)</li>
|
|
<li>cp1257 (báltico)</li>
|
|
<li>cp1258 (vietnamita)</li>
|
|
<li>cp874 (tailandés)</li>
|
|
<li>ISO-8859-1 (Europa Occidental)</li>
|
|
<li>ISO-8859-2 (Europa Central)</li>
|
|
<li>ISO-8859-4 (báltico)</li>
|
|
<li>ISO-8859-5 (cirílico)</li>
|
|
<li>ISO-8859-7 (griego)</li>
|
|
<li>ISO-8859-9 (turco)</li>
|
|
<li>ISO-8859-11 (tailandés)</li>
|
|
<li>ISO-8859-15 (Europa Occidental)</li>
|
|
<li>ISO-8859-16 (Europa Central)</li>
|
|
<li>KOI8-R (ruso)</li>
|
|
<li>KOI8-U (ucraniano)</li>
|
|
</ul>
|
|
Por supuesto, la fuente debe contener los caracteres adecuados a la codificación escogida.
|
|
<br>
|
|
<br>
|
|
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.
|
|
<br>
|
|
<br>
|
|
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.
|
|
<br>
|
|
<br>
|
|
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 <code>$file</code> en el fichero
|
|
.php consecuentemente.
|
|
<br>
|
|
<br>
|
|
Ejemplo:
|
|
<div class="source">
|
|
<pre><code><?php
|
|
<span class="kw">require(</span><span class="str">'makefont/makefont.php'</span><span class="kw">);
|
|
|
|
</span>MakeFont<span class="kw">(</span><span class="str">'c:\\Windows\\Fonts\\comic.ttf'</span><span class="kw">,</span><span class="str">'cp1252'</span><span class="kw">);
|
|
</span>?></code></pre>
|
|
</div>
|
|
que devuelve los ficheros comic.php y comic.z.
|
|
<br>
|
|
<br>
|
|
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.
|
|
<br>
|
|
<br>
|
|
Otra forma de invocar a MakeFont() es a través de la línea de comandos:
|
|
<br>
|
|
<br>
|
|
<kbd>php makefont\makefont.php c:\Windows\Fonts\comic.ttf cp1252</kbd>
|
|
<br>
|
|
<br>
|
|
Por último, para las fuentes TrueType y OpenType, también puede generar los archivos
|
|
<a href="http://www.fpdf.org/makefont/">en línea</a> en lugar de hacerlo manualmente.
|
|
|
|
<h2>Declaración de la fuente en el script</h2>
|
|
El segundo paso es el más simple. Sólo necesita llamar al método <a href='../doc/addfont.htm'>AddFont()</a>:
|
|
<div class="source">
|
|
<pre><code>$pdf<span class="kw">-></span>AddFont<span class="kw">(</span><span class="str">'Comic'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'comic.php'</span><span class="kw">);
|
|
</span></code></pre>
|
|
</div>
|
|
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:
|
|
<div class="source">
|
|
<pre><code>$pdf<span class="kw">-></span>AddFont<span class="kw">(</span><span class="str">'Comic'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span><span class="str">'comicbd.php'</span><span class="kw">);
|
|
</span></code></pre>
|
|
</div>
|
|
|
|
<h2>Ejemplo</h2>
|
|
Veamos ahora un ejemplo completo. Vamos a utilizar la fuente <a href="http://www.abstractfonts.com/font/52" target="_blank">Calligrapher</a>.
|
|
El primer paso es la generación de los archivos de la fuente:
|
|
<div class="source">
|
|
<pre><code><?php
|
|
<span class="kw">require(</span><span class="str">'makefont/makefont.php'</span><span class="kw">);
|
|
|
|
</span>MakeFont<span class="kw">(</span><span class="str">'calligra.ttf'</span><span class="kw">,</span><span class="str">'cp1252'</span><span class="kw">);
|
|
</span>?></code></pre>
|
|
</div>
|
|
El script nos devolverá el siguiente informe:
|
|
<br>
|
|
<br>
|
|
<b>Warning:</b> character Euro is missing<br>
|
|
<b>Warning:</b> character zcaron is missing<br>
|
|
Font file compressed: calligra.z<br>
|
|
Font definition file generated: calligra.php<br>
|
|
<br>
|
|
El carácter del euro no está en la fuente (es muy antigua). Otro carácter tampoco se encuentra en la fuente.
|
|
<br>
|
|
<br>
|
|
Alternativamente, podríamos haber utilizado la línea de comandos:
|
|
<br>
|
|
<br>
|
|
<kbd>php makefont\makefont.php calligra.ttf cp1252</kbd>
|
|
<br>
|
|
<br>
|
|
o haber usado el generado en línea.
|
|
<br>
|
|
<br>
|
|
Podemos copiar estos dos ficheros en el directorio de fuentes (font) y escribir el script:
|
|
<div class="source">
|
|
<pre><code><?php
|
|
<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
|
|
|
|
</span>$pdf <span class="kw">= new </span>FPDF<span class="kw">();
|
|
</span>$pdf<span class="kw">-></span>AddFont<span class="kw">(</span><span class="str">'Calligrapher'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'calligra.php'</span><span class="kw">);
|
|
</span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
|
|
</span>$pdf<span class="kw">-></span>SetFont<span class="kw">(</span><span class="str">'Calligrapher'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>35<span class="kw">);
|
|
</span>$pdf<span class="kw">-></span>Write<span class="kw">(</span>10<span class="kw">,</span><span class="str">'Enjoy new fonts with FPDF!'</span><span class="kw">);
|
|
</span>$pdf<span class="kw">-></span>Output<span class="kw">();
|
|
</span>?></code></pre>
|
|
</div>
|
|
<p class='demo'><a href='tuto7.php' target='_blank' class='demo'>[Demo]</a></p>
|
|
</body>
|
|
</html>
|