This commit is contained in:
2026-05-27 11:44:10 -04:00
commit 414f85ad05
31452 changed files with 3580409 additions and 0 deletions

190
fpdf/tutorial/tuto7.htm Normal file
View File

@ -0,0 +1,190 @@
<!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<6E>r<EFBFBD>t est que l'on peut <20>galement choisir l'encodage des
caract<EFBFBD>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<61> sur le TrueType est support<72> (pas celui bas<61> sur le Type1).<br>
Pour les Type1, vous devez poss<73>der le fichier AFM correspondant (il est g<>n<EFBFBD>ralement fourni avec la police).
<br>
<br>
L'ajout d'une police se fait en deux <20>tapes :
<ul>
<li>G<EFBFBD>n<EFBFBD>ration du fichier de d<>finition de police</li>
<li>D<EFBFBD>claration de la police dans le script</li>
</ul>
<h2>G<EFBFBD>n<EFBFBD>ration du fichier de d<>finition de police</h2>
La premi<6D>re <20>tape consiste <20> g<>n<EFBFBD>rer un fichier PHP contenant toutes les informations dont FPDF a
besoin ; on en profite <20>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 <20> utiliser. Valeur par d<>faut : <code>cp1252</code>.</p>
</dd>
<dt><code>embed</code></dt>
<dd>
<p>Indique si la police doit <20>tre incorpor<6F>e ou non. Valeur par d<>faut : <code>true</code>.</p>
</dd>
<dt><code>subset</code></dt>
<dd>
<p>Indique si le subsetting doit <20>tre utilis<69>. Valeur par d<>faut : <code>true</code>.</p>
</dd>
</dl>
Le premier param<61>tre est le nom du fichier de police. L'extension doit <20>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<67>ce <20> <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<63>re. Les 128
premi<EFBFBD>res sont fixes et correspondent <20> l'ASCII ; les suivantes sont variables. Les encodages sont
stock<EFBFBD>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<68>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<68>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<63>res correspondant <20> l'encodage choisi.
<br>
<br>
Le troisi<73>me param<61>tre indique si la police doit <20>tre incorpor<6F>e ou non. Lorsqu'une police
n'est pas incorpor<6F>e, elle est recherch<63>e dans le syst<73>me. L'avantage est que le fichier PDF est
plus l<>ger ; par contre, si elle n'est pas trouv<75>e, une police de substitution est utilis<69>e. Il
vaut donc mieux s'assurer que le syst<73>me qui lit le PDF a bien la police install<6C>e. Pour assurer
un rendu correct dans tous les cas, il est fortement recommand<6E> d'incorporer.
<br>
<br>
Le dernier param<61>tre indique si le subsetting doit <20>tre utilis<69>, c'est-<2D>-dire si seuls les
caract<EFBFBD>res de l'encodage sp<73>cifi<66> doivent <20>tre conserv<72>s dans la police incorpor<6F>e. Cela
permet de r<>duire de mani<6E>re importante la taille du fichier PDF, surtout si la police
d'origine <20>tait volumineuse.
<br>
<br>
Apr<EFBFBD>s avoir appel<65> la fonction (cr<63>ez pour cela un nouveau fichier et incluez makefont.php), un
fichier .php est cr<63><72>, 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<73> 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 <20>galement le renommer, mais dans ce cas vous devez modifier la
variable <code>$file</code> en cons<6E>quence dans le fichier .php.
<br>
<br>
Exemple :
<div class="source">
<pre><code>&lt;?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>?&gt;</code></pre>
</div>
Ce qui donne les fichiers comic.php et comic.z.
<br>
<br>
Vous devez ensuite copier les fichiers g<>n<EFBFBD>r<EFBFBD>s dans le r<>pertoire des polices. Si la police n'a
pas pu <20>tre compress<73>e, il faut la copier directement <20> la place de la version compress<73>e.
<br>
<br>
Il est <20>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<EFBFBD>rer les fichiers
<a href="http://www.fpdf.org/makefont/">en ligne</a> au lieu de le faire manuellement.
<h2>D<EFBFBD>claration de la police dans le script</h2>
La seconde <20>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">-&gt;</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<67>), utilisable comme les
autres. Si on avait trait<69> le Comic Sans MS Gras (comicbd.ttf), on aurait mis :
<div class="source">
<pre><code>$pdf<span class="kw">-&gt;</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<69>e est <a href="http://www.abstractfonts.com/font/52" target="_blank">Calligrapher</a>.
La premi<6D>re <20>tape consiste <20> g<>n<EFBFBD>rer les fichiers :
<div class="source">
<pre><code>&lt;?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>?&gt;</code></pre>
</div>
L'ex<65>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<63>re euro n'est pas pr<70>sent dans la police (elle est trop ancienne). Un autre caract<63>re manque <20>galement.
<br>
<br>
Nous aurions <20>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<EFBFBD>rateur en ligne.
<br>
<br>
Nous pouvons maintenant copier les deux fichiers g<>n<EFBFBD>r<EFBFBD>s dans le r<>pertoire des polices (font) et <20>crire
le script :
<div class="source">
<pre><code>&lt;?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">-&gt;</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">-&gt;</span>AddPage<span class="kw">();
</span>$pdf<span class="kw">-&gt;</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">-&gt;</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">-&gt;</span>Output<span class="kw">();
</span>?&gt;</code></pre>
</div>
<p class='demo'><a href='tuto7.php' target='_blank' class='demo'>[D<>mo]</a></p>
</body>
</html>