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:

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: 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]