Top > FPDF > tuto7

Adding new fonts and encoding support

このチュートリアルでは標準のフォントに制限されないでどのようにして TrueType または Type1 フォントを使用するかを説明します。他の関心はフォントのエンコードを選択することができることです。西洋の言語以外の言語を使用することができるようになります (標準のフォントはいくつかの文字を利用することができます)。

新しいフォントを使用するには二つの方法があります。PDF にフォントを埋め込む,または埋め込まないことです。フォントを埋め込まないときはシステムに要求されます。利点は PDF ファイルがより軽くなることです。言い換えると,埋め込まれたフォントが利用することができなければ使用されているフォントは置換されます。クライアントのシステムに必要なフォントがインストールされていることが確実なことが好ましいです。ファイルを多くの人が見るならフォントを埋め込むほうがいいです。

新しいフォントを追加するには TrueType では三つのステップが必要です。

  • フォントメトリックファイルの生成 (.afm)
  • フォント定義ファイル (.php)
  • スクリプト中のフォントの宣言

Type1 では,AFM ファイルはフォントに備わっているので理論的には最初のステップは必要ありません。PFM フォーマットのフォントメトリックファイルだけを持っているならここで利入手することのできるコンバーターを使用してください。

Generation of the metric file

TrueType のための最初のステップは AFM ファイルの生成です。このタスクを実行するのにユーティリティーが存在します。ttf2pt1 です。Windows のバイナリーはここで入手することができます。使用するためのコマンドラインは次のようにします。

ttf2pt1 -a font.ttf font

たとえば, Comic Sans MS Regular です。

ttf2pt1 -a c:\windows\fonts\comic.ttf comic

二つのファイルが作成され,一つが関心のある comic.afm です。

Generation of the font definition file

二番めの段階は FPDF に必要なすべての情報を含む PHP ファイルの生成です。さらに,フォントファイルは圧縮されています。このために,ヘルパースクリプトがパッケージの font/makefont/ ディレクトリに用意されています。そのヘルパースクリプトは次の関数を含みます。

MakeFont(string fontfile, string afmfile
   [, string enc [, array patch [, string type]]])
fontfile
.ttf または .pfb ファイルへのパス
afmfile
.afm ファイルへのパス
enc
使用するエンコード名。デフォルト値は cp1252。
patch
エンコードのオプション修正。デフォルトでは空。
type
フォント (TrueType または Type1) のタイプ。デフォルト値は TrueType。

最初の引数はフォントファイルの名前です。拡張子は .ttf または .pfb とし,フォントタイプを指定するものと同じでなければいけません。 ASCII フォーマット (.pfa) での Type1 フォントのとき, t1utils でバイナリーフォーマットに変換することができます。フォントを埋め込みたくないとき,空の文字列を渡します。この場合,タイプはタイプ引数で与えます。

注意: 標準のフォント名と同じ名前でのフォントのとき,たとえば arial.ttf ,必ず埋め込まれます。そうでなければ,Acrobat は自分のフォントを使用するでしょう。

AFM ファイルはすでに生成されています。

エンコードはコード (0 から 255) と文字の間を連結します。最初の 128 文字は固定されていて ASCII に対応します。次のものが変わります。エンコードは .map ファイルに保存されます。これらは次のものが利用可能です。

  • cp1250 (Central Europe)
  • cp1251 (Cyrillic)
  • cp1252 (Western Europe)
  • cp1253 (Greek)
  • cp1257 (Baltic)
  • ISO-8859-1 (Western Europe)
  • ISO-8859-2 (Central Europe)
  • ISO-8859-4 (Baltic)
  • ISO-8859-5 (Cyrillic)
  • ISO-8859-7 (Greek)
  • ISO-8859-15 (Western Europe)
  • ISO-8859-16 (Central Europe)
  • KOI8-R (Cyrillic)

もちろん,フォントは選択したエンコードに対応する文字を含んでいなければいけません。
とりわけ,シンボルフォント (正確な文字であるといえない, Symbol や ZapfDingbats) の場合は空の文字列を渡します。
cp で始まるエンコードは Windows で使用されます。Linux システムは普通 ISO を使用します。

注意: 標準のフォントは cp1252 を使用します。

四番目の引数はエンコードを変更できる可能性をあたえます。時々,いくつかの文字を追加したいでしょう。たとえば, ISO-8859-1 はユーロシンボルを含んでいません。 164 の位置にユーロのシンボルを追加するために array(164=>'Euro') を渡します。

最後の引数は埋めこまない場合のフォントのタイプを与えるのに使用します (最初の引数が空のときといえます) 。

関数を呼び出したあとで (この関数で新しいファイルを作成し,makefont.php をインクルードし,または呼び出すディレクトリ内に単に追加します) .afm ファイルを .php ファイルと同じ名前で作成します。そのファイルの名前を変更したいかもしれません。埋め込む場合には,フォントファイルは圧縮されて拡張子として .z を二番めのファイルに与えます (圧縮関数が利用できない場合を除いて, Zlib が必要です) 。そのファイルも名前を変更するかもしれません。しかしこの場合,変更したファイル名にしたがって .php 負ファイルの $file 変数を変更しなければいけません。

例:

MakeFont('c:\\windows\\fonts\\comic.ttf','comic.afm','cp1252);

例では comic.php と comic.z ファイルを与えます。

そして,生成されたファイルをスクリプトのフォントを使用するであろうディレクトリまたは 定数が定義されているとき FPDF_FONTPATH で与えられたディレクトリにコピーする必要があります。フォントファイルが圧縮できないとき, .z の代わりに .ttf または .pfb ファイルをコピーします。

Declaration of the font in the script

最後のステップは一番簡単です。 AddFont() メソッドを呼ぶ必要があります。たとえば,

$pdf->AddFont('Comic','','comic.php');

または,

$pdf->AddFont('Comic');

とします。

フォントが今利用することができるなら (標準と下線スタイル) ,他のフォントのように使用することができます。 Comic Sans MS Bold (comicbd.ttf) で実行するとき,次のようにします。

$pdf->AddFont('Comic','B','comicbd.php');

Example

さあ,小さな完全な例を見てみましょう。使用するフォントは Calligrapher で, www.abstractfonts.com? (たくさんのフリーな TrueType フォントを提供しているサイトです) 。最初のステップは AFM ファイルの生成です。

ttf2pt1 -a calligra.ttf calligra

で calligra.afm (と削除してもよい calligra.t1a) を得ます。つぎに,定義ファイルを生成します。

<?php
require('../font/makefont/makefont.php');

MakeFont('calligra.ttf','calligra.afm');
?>

関数の呼び出しでは次のレポートを与えます。

Warning: character Euro is missing
Warning: character Zcaron is missing
Warning: character zcaron is missing
Warning: character eth is missing
Font file compressed (calligra.z)
Font definition file generated (calligra.php)

ユーロ文字がフォントに存在しません (フォントがかなり古い) 。三つの文字もかけています。しかし,まったく気にしません。
そして,二つのファイルをフォントディレクトリにコピーして次のスクリプトを書きます。

<?php
define('FPDF_FONTPATH','font/');
require('fpdf.php');

$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->AddFont('Calligrapher','','calligra.php');
$pdf->SetFont('Calligrapher','',35);
$pdf->Cell(0,10,'Enjoy new fonts with FPDF!');
$pdf->Output();
?>

About the euro symbol

ユーロシンボルはすべてのエンコードに存在しませんし,同じ位置にいつも置かれているわけではありません。

EncodingPosition
cp1250128
cp1251136
cp1252128
cp1253128
cp1257128
ISO-8859-1absent
ISO-8859-2absent
ISO-8859-4absent
ISO-8859-5absent
ISO-8859-7absent
ISO-8859-15164
ISO-8859-16164
KOI8-Rabsent

ISO-8859-1 は普及していますがユーロサインは含まれていません。ユーロサインが必要なら,簡単に行うには cp1252 または ISO-8859-15 を代わりに使用することです。それらはほぼ同じですが precious symbol が含まれていません。ISO-8859-2 では ISO-8859-16 を代わりに使用することができますが,多くの違いがあります。したがって,シンボルを追加するためにエンコードにパッチを当てることがより簡単です。パッチの当て方は前述のとおりです。他のエンコードでも同じです。

Font synthesis under Windows

TrueType フォントは与えたスタイルで利用することができないとき, Windows は 標準のフォントからフォントを合成することができます。たとえば, Comic Sans MS Italic はありませんが, Comic Sans MS Regular から作成することができます。この機能は PDF ファイル中で使用することができます。しかし,不運にも標準のフォントがシステム中に存在する必要があります (埋め込む必要はありません) 。それを行う方法を示します。

  • 埋め込まずに標準のフォントに定義ファイルを生成します (望みのスタイルを反映したものに名前を変更してもよいです) 。
  • その定義ファイルを開いて $name 変数に望みのスタイル (Italic, Bold, BoldItalic) をコンマに続けて追加します。

たとえば, comici.php ファイルには

$name='CoimicSansMS,Italic';

そして,普通に使用することができます。

$pdf->AddFont('Comic','I','comici.php');

Reducing the size of TrueType fonts

フォントファイルはたいていはかなりの大きさです (100 以上, 200KB でも)。これは多くのエンコードに従った文字を含んでいることによるものです。Zlib 圧縮はそれらを縮小しますが,まだいくらか大きいです。さらにそのサイズを減らすテクニックがあります。 望むエンコードを指定して ttf2pt1 でフォントを Type1 に変換することです。他のすべての文字は捨てられます。たとえば,Windows 98 に備えられた arial.ttf フォントは267KB (1296 文字を含む) です。圧縮後, 147 KB になります。cp1250 文字のみを保って Type1 に変換しましょう。

ttf2pt1 -b -L cp1250.map c:\windows\fonts\arial.ttf\ arial

.map ファイルはパッケージの font/makefont/ ディレクトリにあります。コマンドで arial.pfb と arial.afm を作り出します。 arial.pfb はたった 35KB で,圧縮後 30KB です。

さらに進めることができます。エンコードのサブセットだけに興味があるなら (すべての 217 文字が必要ないかもしれません) , .map ファイルを開いて興味のない列を削除します。これでファイルサイズがそれに応じて減少します。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes