| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- <!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>
|