今回はPHPのスクリプトからPDFを出力する方法を解説します。
ただ、かなり古い書き方です。。
PHP5技術者認定試験上級を受験される方にとっては有益な情報になると思うので最後まで目を通してください!
PDFライブラリ
PHPでPDFを出力するライブラリはいくつかあります。
有名なところでいうと、FPDF、MBFPDF、TCPDFがあります。
これらのライブラリはネット上からダウンロードしてスクリプトにインクルードするだけで使用できる優れものです。
リンクを貼っておくのでダウンロードして使ってみてください。
FPDF、TCPDF
MBFPDFはもう配布されていないのかもしれません。。
FPDFとMBFPDFの使い方は同じだと思って構いません。
しかし、日本語のようなマルチバイトの文字をPDFに出力したい場合はMBFPDFを使用してください。
TCPDFはUTF-8での多言語出力に優れていて、PDFをHTMLのタグを使用して記述できます。
試験ではMBFPDFの使い方を問われるようなので、MBFPDFに焦点を当てて解説します。
基本操作
MBFPDFライブラリを使用するにはまず、mbfpdf.phpをインクルードする必要があります。
インクルードしてMBFPDFクラスをインスタンス化すればMBFPDFをすぐに使用できる状態になります。
require('./mbfpdf.php');
$pdf = new MBFPDF();
次に使用するフォントを登録します。
登録するにはAddMBFontメソッドを使用します。
AddMBFont(family, encode);
第一引数にはフォントを使用するフォントを指定します。
MBFPDFライブラリでは日本語用のフォントが用意されています。
以下、用意されているフォントです。
(KOZMIN、GOTHIC、PGOTHIC、UIGOTHIC、MINCHO、PMINCHO)
第二引数は文字コードを指定します。
指定できる文字コードはSJIS、EUC_JPのみです。
UTF-8は指定できません。
第三引数にフォント定義ファイルまでのパスを指定することでそのフォントをスクリプト内で使用することができます。
しかし、環境によって日本語が正しく表示されない場合もあるので注意が必要です。
複数フォントを使用したい場合は、その数だけAddMBFontメソッドを呼び出してください。
使用するフォントをGOTHIC、文字コードをSJISにした場合は以下のようになります。
require('./mbfpdf.php');
$pdf = new MBFPDF();
$pdf->AddMBFont(GOTHIC, 'SJIS');
これでGOTHICを使用できるようになりました。
次は新規ページを追加するためにAddPageメソッドを使用します。
このメソッドは引数を取りません。
require('./mbfpdf.php');
$pdf = new MBFPDF();
$pdf->AddMBFont(GOTHIC, 'SJIS');
$pdf->AddPage();
これで新規ページ(1ページ目)が追加されました。
PDFの出力の際に使用するフォントを設定するにはSetFontメソッドを使用します。
SetFont(font, style, size);
第一引数にはSetMBFontメソッドで登録したフォントを指定してください。
第二引数のstyleはB(bold: 太字)、I(italic: 斜体)、U(underline: 下線)のいずれかを指定します。
第三引数はフォントサイズを指定します。
require('./mbfpdf.php');
$pdf = new MBFPDF();
$pdf->AddMBFont(GOTHIC, 'SJIS');
$pdf->AddPage();
$pdf->SetFont(GOTHIC, 'B', 20);
出力に使用するフォントが指定できました。
テキストを出力する方法はいくつかありますが、セルを使用する方法を紹介します。
Cellメソッドは指定した範囲の矩形の中にテキストを出力してくれます。
部分的に境界線をつけたり、そもそも境界線をつけないことも可能です。
Cell(width, height, text, border, ln, align);
第四引数のboderに0を渡すと境界線なし、1を渡すと境界線ありになります。
デフォルトは0です。
また、キーワードで指定することも可能です。
T(top: 上)、R(right: 右)、B(bottom: 下)、L(left: 左)
例えば、左と上だけに境界線を引きたい場合はborderに’LT’を渡してください。
第五引数は次のセルの位置をどうするのかを決めます。
lnに1を渡すと次のセルは右に配置されるのではなく次の行に移ります。
2を渡すと次のセルは下に配置されます。
デフォルトの0は次のセルが右に配置されます。
第六引数のalignはテキストの位置を決めます。
デフォルトはLでテキストが左端に表示されます。
Cを渡すとセルの中央にテキストが表示されます。
Rはテキストが右端に表示されます。
require('./mbfpdf.php');
$pdf = new MBFPDF();
$pdf->AddMBFont(GOTHIC, 'SJIS');
$pdf->AddPage();
$pdf->SetFont(GOTHIC, 'B', 20);
$pdf->Cell(50, 20, 'Hello World') ;
幅50、高さ20の境界線のないセルにHello Worldというテキストを出力する準備ができました。
最後に出力する作業が必要です。
出力はOutputメソッドを呼び出すだけでOKです。
require('./mbfpdf.php');
$pdf = new MBFPDF();
$pdf->AddMBFont(GOTHIC, 'SJIS');
$pdf->AddPage();
$pdf->SetFont(GOTHIC, 'B', 20);
$pdf->Cell(50, 20, 'Hello World') ;
$pdf->Output();
ブラウザ上にPDFが出力されていれば成功です。
Lnメソッドを使用すれば縦のセルの間隔を広げることができます。
また、このメソッドに引数を渡さず使用すると次のセルが改行して表示されます。
require('./mbfpdf.php');
$pdf = new MBFPDF();
$pdf->AddMBFont(GOTHIC, 'SJIS');
$pdf->AddPage();
$pdf->SetFont(GOTHIC, 'B', 20);
$pdf->Cell(50, 20, 'Hello World') ;
$pdf->Ln(5.5);
$pdf->Cell(50, 20, 'Hello PDF');
$pdf->Output();
Hello WorldのセルとHello PDFのセルの縦の間隔は5.5ptになります。
このように空のセルを作ることなくセルの縦の間隔を広げることができました。
コンストラクタで設定できる値
MBFPDFのコンストラクタではPDFの用紙の方向、座標の単位、ページのサイズの3つを指定することができます。
$pdf = new MBFPDF(orientation, unit, size);
orientationは用紙の方向を指定します。
受け取る値はPかLだけです。
デフォルトはPで縦ですが、Lを渡すと横になります。
unitは座標の単位を指定します。
受け取る値はpt、in、mm、cmのいずれか一つです。
デフォルトはptになっています。
sizeはページのサイズを指定します。
受け取る値は、Letter、Legal、A5、A3、A4です。
デフォルトはLetterになっています。
A4の横向きのPDFを作成する場合は以下のようなコードになります。(単位はpt)
$pdf = new MBFPDF('L', 'pt', 'A4');
コンストラクタで指定した座標の単位がCellメソッドやLnメソッドの単位としても使用されます。
テキストの色を変更する
テキストの色を変更するにはSetTextColorメソッドを使用します。
このメソッドは必ず、Cellメソッドの前に呼び出してください。
$pdf->SetTextColor(red, green, blue);
引数にはそれぞれ0~255の値を渡します。
第一引数のみ値を渡した場合は、その値が第二引数と第三引数にも適用されます。
require('./mbfpdf.php');
$pdf = new MBFPDF();
$pdf->AddMBFont(GOTHIC, 'SJIS');
$pdf->AddPage();
$pdf->SetFont(GOTHIC, 'B', 20);
$pdf->SetTextColor(255, 0, 0);
$pdf->Cell(50, 20, 'Hello World') ;
$pdf->Ln();
$pdf->SetTextColor(0);
$pdf->Cell(50, 20, 'Hello PDF');
$pdf->Output();
セル関連のメソッド
$pdf->SetDrawColor(red, green, blue);
セルの境界線の色を指定します。
第二引数、第三引数を省略すると第一引数の値がそれぞれ渡されます。
$pdf->SetFillColor(red, green, blue);
セルの背景色を指定します。
第二引数、第三引数を省略した場合の処理は同じです。
$pdf->SetLineWidth(width);
セルの境界線の太さを指定します。
ページ関連のメソッド
$pdf->PageNo();
現在のページ番号を返します。
$pdf->AliasNbPages()
このメソッドを実行するとnbという変数が定義され、その変数の中にそうページ数が代入される。
画像
MBFPDFライブラリで作成するPDF内に画像を挿入する場合はImageメソッドを使用します。
$pdf->Image(name, x, y, width, height);
表示したい画像の位置をxとyに、サイズをそれぞれwidthとheightに渡してください。
widthとheightを省略した場合、MBFPDFが最適な大きさで画像を表示してくれます。
リンク
MBFPDFは2種類のリンクを作成できます。
1つ目は同じドキュメント内のページを跨ぐ内部リンク、2つ目は外部リンクです。
内部リンクを作成するには起点と終点が必要です。
起点を指定するにはAddLinkメソッド、終点を指定するにはSetLinkメソッドを使用します。
AddLinkメソッドの返り値をImageメソッド、Cellメソッド、Writeメソッドのいずれかの引数に渡すことでクリックすることができる画像もしくはテキストを生成できます。
SetLinkメソッドの引数には同じようにAddLinkメソッドの返り値を渡します。
これで内部リンクの完成です。
Imageメソッド、Cellメソッド、Writeメソッドそれぞれを使用したリンクの生成方法を順に記述しておくので確認しておいてください。
// Imageメソッドを使用する場合
require('./mbfpdf.php');
$pdf = new MBFPDF();
$pdf->AddPage();
$link = $pdf->AddLink();
$pdf->Image("php.png", 0, 0, 256, 135, "PNG", $link);
$pdf->AddPage();
$pdf->SetLink($link);
// Cellメソッドを使用する場合
require('./mbfpdf.php');
$pdf = new MBFPDF();
$pdf->AddPage();
$link = $pdf->AddLink();
$pdf->Cell(50, 10, 'ここ', 0, 0, 'L', false, $link);
$pdf->AddPage();
$pdf->SetLink($link);
// Writeメソッドを使用する場合
require('./mbfpdf.php');
$pdf = new MBFPDF();
$pdf->AddPage();
$link = $pdf->AddLink();
$pdf->Write(5, "ここ", $link);
$pdf->AddPage();
$pdf->SetLink($link);
外部リンクはAddLinkメソッドとSetLinkメソッドを使用する必要はなく、Imageメソッド、Cellメソッド、Writeメソッドにリンクを渡すだけ大丈夫です。