# Aggiunta di nuovi font e supporto codifica

Questo tutorial spiega come usare i font TrueType, OpenType e Type1 in modo da non essere più limitati ai font standard predefiniti. L'altro beneficio è che si può scegliere una codifica del testo, permettendo di utilizzare altre lingue oltre a quelle occidentali (i font standard supportano solo cp1252, anche noto come windows-1252).
Per OpenType, è supportato solo il formato basato su TrueType (non quello basato su Type1).
Per Type1, c'è bisogno del corrispondente file AFM (di solito è fornito insieme al font).
Aggiungere un nuovo font richiede due passi:

- Generazione di un file di definizione
- Dichiarazione di un font nello script

## Generatore di un file di definizione

Il primo passo consiste nel generare un file PHP contenente tutte le informazioni che necessita FPDF; in aggiunta, il file del font è compresso. Per farlo, uno script di aiuto è fornito nella cartella makefont del pacchetto: makefont.php. Contiene le seguenti funzioni:
`MakeFont(string fontfile [, string enc [, boolean embed [, boolean subset]]])`

`fontfile`

  Percorso del file .ttf, .otf or .pfb.

`enc`

  Nome della codifica in uso. Predefinito: `cp1252`.

`embed`

  Se incorporare il font o meno. Predefinito: `true`.

`subset`

  Se inserire il sottoinsieme del font o meno. Predefinito: `true`.

Il primo parametro è il nome del file del font. L'estensione può essere sia .ttf, .otf o .pfb e determina il tipo di font. Se si utilizza il font Type1 con il formato è ASCII (.pfa), puoi convertirlo in binario (.pfb) con l'aiuto di t1utils.
Per i font Type1, il file .afm corrispondente deve essere presente nella stessa cartella.
La codifica definisce l'associazione fra un codice (da 0 a 255) ed il carattere. I primi 128 sono sempre gli stessi corrispondenti all'ASCII; i successivi sono disponibili. Le codifiche sono salvate in file .map. Quelle disponibili sono:

- cp1250 (Central Europe)
- cp1251 (Cyrillic)
- cp1252 (Western Europe)
- cp1253 (Greek)
- cp1254 (Turkish)
- cp1255 (Hebrew)
- cp1257 (Baltic)
- cp1258 (Vietnamese)
- cp874 (Thai)
- ISO-8859-1 (Western Europe)
- ISO-8859-2 (Central Europe)
- ISO-8859-4 (Baltic)
- ISO-8859-5 (Cyrillic)
- ISO-8859-7 (Greek)
- ISO-8859-9 (Turkish)
- ISO-8859-11 (Thai)
- ISO-8859-15 (Western Europe)
- ISO-8859-16 (Central Europe)
- KOI8-R (Russian)
- KOI8-U (Ukrainian)

Ovviamente il font deve contenere i caratteri corrispondenti alla codifica selezionata.
Il terzo parametro indica se il font debba essere incorporato nel PDF o meno. Quando un font non è incorporato, sarà cercato nel sistema. Il vantaggio è che il file PDF è più leggero; se però il font non fosse disponibile, sarà utilizzato un font sostitutivo. Occorre verificare che il font richiesto sia installato sui sistemi dei destinatari. L'incorporazione è l'opzione raccomandata per garantire la portabilità.
L'ultimo parametro indica se utilizzare un sottoinsieme o meno, il chè significa che solo i caratteri della codifica seelezionata saranno mantenuti nel font incorporato. Come risultato, la dimensione del PDF può essere ridotta di molto, specialmente se il font originale era pesante.
Dopo aver chiamato la funzione (per fare questo crea un nuovo file e includi makefont.php), sarà creato un file .php, con lo stesso nome del file del font. Puoi rinominarlo se lo desideri. Per incorporarlo, il file del font è compresso e si ottiene un secondo file con estensione .z (tranne se la funzione per la compressione non sia disponibile, dato che richiede Zlib). Puoi rinominare anche quest'ultimo, ma in questo caso occorre cambiare la variabile `$file` del file .php di conseguenza.
Esempio:

    <?php
    require('makefont/makefont.php');

    MakeFont('C:\\Windows\\Fonts\\comic.ttf','cp1252');
    ?>

che genera i file comic.php e comic.z.
Copiare i file generati nella cartella font. Se il font non può essere compresso, copialo direttamente al posto della versione .z.
In altro modo è utilizzare MakeFont() da linea di comando:
`php makefont\makefont.php C:\Windows\Fonts\comic.ttf cp1252`
Concludendo, per i font TrueType e OpenType fonts, puoi anche generare i file online invece che farlo manualmente.

## Dichiarazione dei font nello script

Il secondo file è semplice. C'è solo bisogno di chiamare il metodo AddFont():

    $pdf->AddFont('Comic','','comic.php');

Il font sarà ora disponibile (in forma di stili regolare e sottolineato), utilizzabile come gli altri. Se abbiamo lavorato con Comic Sans MS Bold (comicbd.ttf), dovremmo avere scritto:

    $pdf->AddFont('Comic','B','comicbd.php');

## Esempio

Ora proviamo un esempio completo. Sarà usato il font Calligrapher. Il primo passo è la generazione dei file del font:

    <?php
    require('makefont/makefont.php');

    MakeFont('calligra.ttf','cp1252');
    ?>

Lo script scaturirà alcuni avvisi:
Warning: character Euro is missing
Warning: character zcaron is missing
Font file compressed: calligra.z
Font definition file generated: calligra.php
Il carattere dell'euro non è presete nel font (è troppo vecchio). Ne manca anche un altro.
Alternativamente possiamo usare la linea di comando:
`php makefont\makefont.php calligra.ttf cp1252`
o utilizzando il generatore online.
Ora è possibile copiare i due file generati nella cartella font e scrivere lo script:

    <?php

    require('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]