update
This commit is contained in:
190
fpdf/tutorial/tuto7.htm
Normal file
190
fpdf/tutorial/tuto7.htm
Normal 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><?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<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">-></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">-></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><?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<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><?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>
|
||||
Reference in New Issue
Block a user