Adding new fonts and encoding supportこのチュートリアルでは標準のフォントに制限されないでどのようにして TrueType または Type1 フォントを使用するかを説明します。他の関心はフォントのエンコードを選択することができることです。西洋の言語以外の言語を使用することができるようになります (標準のフォントはいくつかの文字を利用することができます)。 新しいフォントを使用するには二つの方法があります。PDF にフォントを埋め込む,または埋め込まないことです。フォントを埋め込まないときはシステムに要求されます。利点は PDF ファイルがより軽くなることです。言い換えると,埋め込まれたフォントが利用することができなければ使用されているフォントは置換されます。クライアントのシステムに必要なフォントがインストールされていることが確実なことが好ましいです。ファイルを多くの人が見るならフォントを埋め込むほうがいいです。 新しいフォントを追加するには TrueType では三つのステップが必要です。
Type1 では,AFM ファイルはフォントに備わっているので理論的には最初のステップは必要ありません。PFM フォーマットのフォントメトリックファイルだけを持っているならここ Generation of the metric fileTrueType のための最初のステップは AFM ファイルの生成です。このタスクを実行するのにユーティリティーが存在します。ttf2pt1 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]]])
最初の引数はフォントファイルの名前です。拡張子は .ttf または .pfb とし,フォントタイプを指定するものと同じでなければいけません。 ASCII フォーマット (.pfa) での Type1 フォントのとき, t1utils 注意: 標準のフォント名と同じ名前でのフォントのとき,たとえば arial.ttf ,必ず埋め込まれます。そうでなければ,Acrobat は自分のフォントを使用するでしょう。 AFM ファイルはすでに生成されています。 エンコードはコード (0 から 255) と文字の間を連結します。最初の 128 文字は固定されていて ASCII に対応します。次のものが変わります。エンコードは .map ファイルに保存されます。これらは次のものが利用可能です。
もちろん,フォントは選択したエンコードに対応する文字を含んでいなければいけません。 注意: 標準のフォントは 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 ユーロ文字がフォントに存在しません (フォントがかなり古い) 。三つの文字もかけています。しかし,まったく気にしません。 <?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ユーロシンボルはすべてのエンコードに存在しませんし,同じ位置にいつも置かれているわけではありません。
ISO-8859-1 は普及していますがユーロサインは含まれていません。ユーロサインが必要なら,簡単に行うには cp1252 または ISO-8859-15 を代わりに使用することです。それらはほぼ同じですが precious symbol が含まれていません。ISO-8859-2 では ISO-8859-16 を代わりに使用することができますが,多くの違いがあります。したがって,シンボルを追加するためにエンコードにパッチを当てることがより簡単です。パッチの当て方は前述のとおりです。他のエンコードでも同じです。 Font synthesis under WindowsTrueType フォントは与えたスタイルで利用することができないとき, Windows は 標準のフォントからフォントを合成することができます。たとえば, Comic Sans MS Italic はありませんが, Comic Sans MS Regular から作成することができます。この機能は PDF ファイル中で使用することができます。しかし,不運にも標準のフォントがシステム中に存在する必要があります (埋め込む必要はありません) 。それを行う方法を示します。
たとえば, 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 ファイルを開いて興味のない列を削除します。これでファイルサイズがそれに応じて減少します。 |