Server : Apache System : Linux webd348.cluster026.gra.hosting.ovh.net 5.15.148-ovh-vps-grsec-zfs-classid #1 SMP Thu Feb 8 09:41:04 UTC 2024 x86_64 User : hednacluml ( 122243) PHP Version : 8.3.9 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl Directory : /home/hednacluml/universe/lib/h5c1accba-fpdf181/tutorial/ |
<!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>Ajout de polices et encodages</title> <link type="text/css" rel="stylesheet" href="../fpdf.css"> </head> <body> <h1>Ajout de polices et encodages</h1> Ce tutoriel explique comment ajouter des polices TrueType, OpenType et Type1 afin de ne plus se limiter aux polices standards. L'autre int�r�t est que l'on peut �galement choisir l'encodage des caract�res afin d'utiliser d'autres langues (les polices standards ne supportant que l'encodage cp1252). <br> <br> Pour l'OpenType, seul le format bas� sur le TrueType est support� (pas celui bas� sur le Type1).<br> Pour les Type1, vous devez poss�der le fichier AFM correspondant (il est g�n�ralement fourni avec la police). <br> <br> L'ajout d'une police se fait en deux �tapes : <ul> <li>G�n�ration du fichier de d�finition de police</li> <li>D�claration de la police dans le script</li> </ul> <h2>G�n�ration du fichier de d�finition de police</h2> La premi�re �tape consiste � g�n�rer un fichier PHP contenant toutes les informations dont FPDF a besoin ; on en profite �galement pour compresser le fichier de police. Pour cela, un script est fourni dans le r�pertoire makefont de l'archive : makefont.php. Il contient la fonction suivante : <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>Chemin du fichier .ttf, .otf ou .pfb.</p> </dd> <dt><code>enc</code></dt> <dd> <p>Nom de l'encodage � utiliser. Valeur par d�faut : <code>cp1252</code>.</p> </dd> <dt><code>embed</code></dt> <dd> <p>Indique si la police doit �tre incorpor�e ou non. Valeur par d�faut : <code>true</code>.</p> </dd> <dt><code>subset</code></dt> <dd> <p>Indique si le subsetting doit �tre utilis�. Valeur par d�faut : <code>true</code>.</p> </dd> </dl> Le premier param�tre est le nom du fichier de police. L'extension doit �tre .ttf, .otf ou .pfb et d�termine le type de la police. Si votre police Type1 est au format ASCII (.pfa), vous pouvez la convertir en binaire (.pfb) gr�ce � <a href="http://www.lcdf.org/~eddietwo/type/#t1utils" target="_blank">t1utils</a>. <br> <br> Pour les polices Type1, le fichier .afm correspondant doit se trouver dans le m�me r�pertoire. <br> <br> L'encodage d�finit l'association entre un code (compris entre 0 et 255) et un caract�re. Les 128 premi�res sont fixes et correspondent � l'ASCII ; les suivantes sont variables. Les encodages sont stock�s dans des fichiers .map. Ceux disponibles sont les suivants : <ul> <li>cp1250 (Europe Centrale)</li> <li>cp1251 (cyrillique)</li> <li>cp1252 (Europe de l'Ouest)</li> <li>cp1253 (grec)</li> <li>cp1254 (turc)</li> <li>cp1255 (h�breu)</li> <li>cp1257 (pays baltes)</li> <li>cp1258 (vietnamien)</li> <li>cp874 (tha�landais)</li> <li>ISO-8859-1 (Europe de l'Ouest)</li> <li>ISO-8859-2 (Europe Centrale)</li> <li>ISO-8859-4 (pays Baltes)</li> <li>ISO-8859-5 (cyrillique)</li> <li>ISO-8859-7 (grec)</li> <li>ISO-8859-9 (turc)</li> <li>ISO-8859-11 (tha�landais)</li> <li>ISO-8859-15 (Europe de l'Ouest)</li> <li>ISO-8859-16 (Europe Centrale)</li> <li>KOI8-R (russe)</li> <li>KOI8-U (ukrainien)</li> </ul> Il faut bien s�r que la police contienne les caract�res correspondant � l'encodage choisi. <br> <br> Le troisi�me param�tre indique si la police doit �tre incorpor�e ou non. Lorsqu'une police n'est pas incorpor�e, elle est recherch�e dans le syst�me. L'avantage est que le fichier PDF est plus l�ger ; par contre, si elle n'est pas trouv�e, une police de substitution est utilis�e. Il vaut donc mieux s'assurer que le syst�me qui lit le PDF a bien la police install�e. Pour assurer un rendu correct dans tous les cas, il est fortement recommand� d'incorporer. <br> <br> Le dernier param�tre indique si le subsetting doit �tre utilis�, c'est-�-dire si seuls les caract�res de l'encodage sp�cifi� doivent �tre conserv�s dans la police incorpor�e. Cela permet de r�duire de mani�re importante la taille du fichier PDF, surtout si la police d'origine �tait volumineuse. <br> <br> Apr�s avoir appel� la fonction (cr�ez pour cela un nouveau fichier et incluez makefont.php), un fichier .php est cr��, avec le m�me nom que celui du fichier de police. Vous pouvez le renommer si vous le souhaitez. Dans le cas de l'incorporation, le fichier de police est compress� et donne un second fichier avec comme extension .z (sauf si la fonction de compression n'est pas disponible, elle n�cessite Zlib). Vous pouvez �galement le renommer, mais dans ce cas vous devez modifier la variable <code>$file</code> en cons�quence dans le fichier .php. <br> <br> Exemple : <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> Ce qui donne les fichiers comic.php et comic.z. <br> <br> Vous devez ensuite copier les fichiers g�n�r�s dans le r�pertoire des polices. Si la police n'a pas pu �tre compress�e, il faut la copier directement � la place de la version compress�e. <br> <br> Il est �galement possible d'appeler MakeFont() via la ligne de commande : <br> <br> <kbd>php makefont\makefont.php C:\Windows\Fonts\comic.ttf cp1252</kbd> <br> <br> Enfin, pour les polices TrueType et OpenType, il est possible de g�n�rer les fichiers <a href="http://www.fpdf.org/makefont/">en ligne</a> au lieu de le faire manuellement. <h2>D�claration de la police dans le script</h2> La seconde �tape est la plus simple. Il suffit d'appeler la m�thode <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> Et la police est maintenant disponible (dans le style normal et soulign�), utilisable comme les autres. Si on avait trait� le Comic Sans MS Gras (comicbd.ttf), on aurait mis : <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>Exemple</h2> Voyons maintenant un exemple complet. La police utilis�e est <a href="http://www.abstractfonts.com/font/52" target="_blank">Calligrapher</a>. La premi�re �tape consiste � g�n�rer les fichiers : <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> L'ex�cution du script donne le compte-rendu suivant : <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> Le caract�re euro n'est pas pr�sent dans la police (elle est trop ancienne). Un autre caract�re manque �galement. <br> <br> Nous aurions �galement pu utiliser la ligne de commande : <br> <br> <kbd>php makefont\makefont.php calligra.ttf cp1252</kbd> <br> <br> ou bien le g�n�rateur en ligne. <br> <br> Nous pouvons maintenant copier les deux fichiers g�n�r�s dans le r�pertoire des polices (font) et �crire le 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">'Changez de police avec 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'>[D�mo]</a></p> </body> </html>