From 0eb99d537d4179c7c4211600b58adb59d97f0d61 Mon Sep 17 00:00:00 2001 From: Sashi20 Date: Wed, 7 Aug 2019 12:36:30 +0530 Subject: Enable link to download certificate --- pdf/fpdf/tutorial/tuto7.htm | 241 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100755 pdf/fpdf/tutorial/tuto7.htm (limited to 'pdf/fpdf/tutorial/tuto7.htm') diff --git a/pdf/fpdf/tutorial/tuto7.htm b/pdf/fpdf/tutorial/tuto7.htm new file mode 100755 index 0000000..21a3f6e --- /dev/null +++ b/pdf/fpdf/tutorial/tuto7.htm @@ -0,0 +1,241 @@ + + + + +Adding new fonts and encoding support + + + + +

Adding new fonts and encoding support

+This tutorial explains how to use TrueType, OpenType and Type1 fonts so that you are not limited to +the standard fonts any more. The other benefit is that you can choose the font encoding, which allows +you to use other languages than the Western ones (the standard fonts having too few available characters). +
+
+Remark: for OpenType, only the format based on TrueType is supported (not the one based on Type1). +
+
+There are two ways to use a new font: embedding it in the PDF or not. When a font is not +embedded, it is searched in the system. The advantage is that the PDF file is lighter; on the other +hand, if it's not available, a substitution font is used. So it's preferable to ensure that the +needed font is installed on the client systems. If the file is to be viewed by a large audience, +it's highly recommended to embed. +
+
+Adding a new font requires two steps: + +For Type1, you need the corresponding AFM file. It's usually provided with the font. + +

Generation of the font definition file

+The first step consists in generating a PHP file containing all the information needed by FPDF; +in addition, the font file is compressed. To do this, a helper script is provided in the makefont +directory of the package: makefont.php. It contains the following function: +
+
+MakeFont(string fontfile, [, string enc [, boolean embed]]) +
+
fontfile
+
+

Path to the .ttf, .otf or .pfb file.

+
+
enc
+
+

Name of the encoding to use. Default value: cp1252.

+
+
embed
+
+

Whether to embed the font or not. Default value: true.

+
+
+The first parameter is the name of the font file. The extension must be either .ttf, .otf or .pfb and +determines the font type. If your Type1 font is in ASCII format (.pfa), you can convert it to binary +(.pfb) with the help of t1utils. +
+
+For Type1 fonts, the corresponding .afm file must be present in the same directory. +
+
+The encoding defines the association between a code (from 0 to 255) and a character. The first 128 are +always the same and correspond to ASCII; the following are variable. Encodings are stored in .map +files. The available ones are: + +Of course, the font must contain the characters corresponding to the chosen encoding. +
+
+Remark: the standard fonts use cp1252. +
+
+After you have called the function (create a new file for this and include makefont.php), a .php file +is created, with the same name as the font file. You may rename it if you wish. If the case of embedding, +the font file is compressed and gives a second file with .z as extension (except if the compression +function is not available, it requires Zlib). You may rename it too, but in this case you have to change +the variable $file in the .php file accordingly. +
+
+Example: +
+
<?php
+require('makefont/makefont.php');
+
+MakeFont('c:\\Windows\\Fonts\\comic.ttf','cp1252');
+?>
+
+which gives the files comic.php and comic.z. +
+
+Then copy the generated files to the font directory. If the font file could not be compressed, copy +it directly instead of the .z version. +
+
+Another way to call MakeFont() is through the command line: +
+
+php makefont\makefont.php c:\Windows\Fonts\comic.ttf cp1252 +
+
+Finally, for TrueType and OpenType fonts, you can also generate the files +online instead of doing it manually. + +

Declaration of the font in the script

+The second step is simple. You just need to call the AddFont() method: +
+
$pdf->AddFont('Comic','','comic.php');
+
+
+And the font is now available (in regular and underlined styles), usable like the others. If we +had worked with Comic Sans MS Bold (comicbd.ttf), we would have written: +
+
$pdf->AddFont('Comic','B','comicbd.php');
+
+
+ +

Example

+Let's now see a complete example. We will use the font Calligrapher. +The first step is the generation of the font files: +
+
<?php
+require('makefont/makefont.php');
+
+MakeFont('calligra.ttf','cp1252');
+?>
+
+The script gives the following report: +
+
+Warning: character Euro is missing
+Warning: character zcaron is missing
+Font file compressed: calligra.z
+Font definition file generated: calligra.php
+
+The euro character is not present in the font (it's too old). Another character is missing too. +
+
+Alternatively we could have used the command line: +
+
+php makefont\makefont.php calligra.ttf cp1252 +
+
+or used the online generator. +
+
+We can now copy the two generated files to the font directory and write the 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]

+ +

About the euro symbol

+The euro character is not present in all encodings, and is not always placed at the same position: + + + + + + + + + + + + + + + + + + + + + + +
EncodingPosition
cp1250128
cp1251136
cp1252128
cp1253128
cp1254128
cp1255128
cp1257128
cp1258128
cp874128
ISO-8859-1N/A
ISO-8859-2N/A
ISO-8859-4N/A
ISO-8859-5N/A
ISO-8859-7N/A
ISO-8859-9N/A
ISO-8859-11N/A
ISO-8859-15164
ISO-8859-16164
KOI8-RN/A
KOI8-UN/A
+ISO-8859-1 is widespread but does not include the euro sign. If you need it, the simplest thing +to do is to use cp1252 or ISO-8859-15 instead, which are nearly identical but contain the precious +symbol. + +

Reducing the size of TrueType fonts

+Font files are often quite voluminous; this is due to the fact that they contain the characters +corresponding to many encodings. Zlib compression reduces them but they remain fairly big. A +technique exists to reduce them further. It consists in converting the font to the Type1 format +with ttf2pt1 (the Windows binary is +available here) while specifying the encoding +you are interested in; all other characters will be discarded. +
+For example, the arial.ttf font that ships with Windows Vista weights 748 KB (it contains 3381 characters). +After compression it drops to 411. Let's convert it to Type1 by keeping only cp1250 characters: +
+
+ttf2pt1 -b -L cp1250.map c:\Windows\Fonts\arial.ttf arial +
+
+The .map files are located in the makefont directory of the package. The command produces +arial.pfb and arial.afm. The arial.pfb file weights only 57 KB, and 53 after compression. +
+
+It's possible to go even further. If you are interested only by a subset of the encoding (you +probably don't need all 217 characters), you can open the .map file and remove the lines you are +not interested in. This will reduce the file size accordingly. + + -- cgit