私のパソコン雑記帖

PDF生成ライブラリFPDF

カテゴリー: PHP
17Sep2013
更新 1Mar2015

FPDFとは

FPDFとはPHP用のPDF生成ライブラリで無償で自由に利用できます。

HTMLによるページ表示では正確に印刷仕様を規定することが出来ません。しかしPDFファイルであれば、ページの表示方法や、テキスト、グラフィックス、画像をページ上に表示する方法を完全に規定することができます。FPDFはそのようなニーズを満たしてくれます。

FPDFは http://www.fpdf.org/ からフリーダウンロードできます。日本語サポートも用意されていますが、エンコードはSJISです。UTF-8 support も用意されているので、ここではそれを利用することにします。 ダウンロードして解凍すると tfpdf というフォールダが得られるのでそのままアップロードします。ただし、日本語を表記するためにユニバーサルフォント ARIALUNI.TTF が必要です。フリーダウンロードサイトは検索で容易に探すことができますから(例えばsourceforge.jp)、これを tfpdf/font/unifont/ に配置します。これで準備は終りです。


作成サンプル

市販されているマルチカード名詞印刷用紙を使って名詞を作成する例です。とりあえずこのような簡単な例で概要を把握するのが早道と思います。


作成例に従ったPHPコーディング

<?php
//名詞面の文字列に変数名を与えます。
$str1="アドアドアド株式会社";//会社名
$str2="広報部 リーダー";//タイトル
$str3="鈴木智子";//氏名
$str4="〒108-0022";//郵便番号
$str5="東京都海岸3-20-20";//住所1
$str6="ヨコソーレインボータワー5階";//住所2
$str7="連絡先";//
$str8="TEL:03-000-1234";//電話番号
$str9="FAX:03-000-5678";//ファックス番号
$str10="E-Mail:tomoko_suzuki@adoadoado.com";//Eメールアドレス

//以下コーディング開始
require('…/tfpdf/tfpdf.php');//実行ファイルへのパス
$pdf = new tfpdf('P','mm','A4');//用紙と数値単位の設定、Pは縦書きLは横書き
$pdf->SetMargins(14, 11);//左マージン、トップマージン、(右マージンは左に同じ)
$pdf->AddFont('ARIAL','','ARIALUNI.TTF',true);//ユニバーサルフォントを指定
$pdf->AddPage();//新規ページ起こし
$pdf->SetAutoPageBreak(true,0);//改ページ設定、数値は下マージン。
//SetAutoPageBreakの設定を省くと、下端から20mmで改行される
$pdf->SetTextColor(0,0,0);//テキストの文字色をRGBで設定(この場合黒)
$pdf->SetFont('ARIAL');//フォントスタイルの設定

//以下名詞面の記述開始
for($i=1;$i<=5;$i++){//1段2列の記述を5回繰り返す
//1段2列の記述

$pdf->SetFontSize(14);//フォントサイズは pt で指定。指定する際の留意事項は後述参照。
   $pdf->Cell(182,4,"",0,0);//幅182高さ4のブランクスペース。Cell については後述参照。
   $pdf->Ln();//改行(以下見やすくするため改行の後に空行を置く。)

   $pdf->Cell(10,5,"",0,0,'L');//以下4行は、高さ5のスペースに文字列 $str1 を書きこむ。
   $pdf->Cell(81,5,$str1,0,0,'L');
   $pdf->Cell(10,5,"",0,0,'L');
   $pdf->Cell(81,5,$str1,0,0,'L');
   $pdf->Ln();//

   $pdf->Cell(182,0.5,"",0,0);//幅182高さ0.5のブランクスペース。
   $pdf->Ln();//

$pdf->SetFillColor(255,0,0);//背景色をRGBで設定(赤)
   $pdf->Cell(182,0.5,"",0,0,0,'true');//幅182高さ0.5背景色赤のブランクスペース。
   $pdf->Ln();//

   $pdf->Cell(182,0.5,"",0,0);//幅182高さ0.5のブランクスペース。
   $pdf->Ln();//

$pdf->SetFillColor(0,0,255);//背景色をRGBで設定(青)
   $pdf->Cell(182,0.5,"",0,0,0,'true');//幅182高さ0.5背景色青のブランクスペース。
   $pdf->Ln();

   $pdf->Cell(182,2.5,"",0,0);//幅182高さ2.5のブランクスペース。
   $pdf->Ln();

$pdf->SetFontSize(9);//フォントサイズ変更。
   $pdf->Cell(13,3.5,"",0,0,'L');//以下4行は、高さ3.5のスペースに文字列 $str2 を書きこむ。
   $pdf->Cell(78,3.5,$str2,0,0,'L');
   $pdf->Cell(13,3.5,"",0,0,'L');
   $pdf->Cell(78,3.5,$str2,0,0,'L');
   $pdf->Ln();

   $pdf->Cell(182,1.5,"",0,0);//幅182高さ1.5のブランクスペース。
   $pdf->Ln();

$pdf->SetFontSize(16);//フォントサイズ変更。
   $pdf->Cell(13,6,"",0,0,'L');//以下4行は、高さ6のスペースに文字列 $str3 を書きこむ。
   $pdf->Cell(78,6,$str3,0,0,'L');
   $pdf->Cell(13,6,"",0,0,'L');
   $pdf->Cell(78,6,$str3,0,0,'L');
   $pdf->Ln();

   $pdf->Cell(182,4,"",0,0);//幅182高さ4のブランクスペース。
   $pdf->Ln();

$pdf->SetFontSize(9);//フォントサイズ変更。
   $pdf->Cell(34,3.5,"",0,0,'L');//以下4行は、高さ3.5のスペースに文字列 $str4 を書きこむ。
   $pdf->Cell(57,3.5,$str4,0,0,'L');
   $pdf->Cell(34,3.5,"",0,0,'L');
   $pdf->Cell(57,3.5,$str4,0,0,'L');
   $pdf->Ln();

   $pdf->Cell(34,3.5,"",0,0,'L');//以下4行は、高さ3.5のスペースに文字列 $str5 を書きこむ。
   $pdf->Cell(57,3.5,$str5,0,0,'L');
   $pdf->Cell(34,3.5,"",0,0,'L');
   $pdf->Cell(57,3.5,$str5,0,0,'L');
   $pdf->Ln();

   $pdf->Cell(34,3.5,"",0,0,'L');//以下4行は、高さ3.5のスペースに文字列 $str6 を書きこむ。
   $pdf->Cell(57,3.5,$str6,0,0,'L');
   $pdf->Cell(34,3.5,"",0,0,'L');
   $pdf->Cell(57,3.5,$str6,0,0,'L');
   $pdf->Ln();

   $pdf->Cell(31,3.5,"",0,0,'L');//以下4行は、高さ3.5のスペースに文字列 $str7 を書きこむ。
   $pdf->Cell(60,3.5,$str7,0,0,'L');
   $pdf->Cell(31,3.5,"",0,0,'L');
   $pdf->Cell(60,3.5,$str7,0,0,'L');
   $pdf->Ln();

   $pdf->Cell(34,3.5,"",0,0,'L');//以下4行は、高さ3.5のスペースに文字列 $str8 を書きこむ。
   $pdf->Cell(57,3.5,$str8,0,0,'L');
   $pdf->Cell(34,3.5,"",0,0,'L');
   $pdf->Cell(57,3.5,$str8,0,0,'L');
   $pdf->Ln();

   $pdf->Cell(34,3.5,"",0,0,'L');//以下4行は、高さ3.5のスペースに文字列 $str9 を書きこむ。
   $pdf->Cell(57,3.5,$str9,0,0,'L');
   $pdf->Cell(34,3.5,"",0,0,'L');
   $pdf->Cell(57,3.5,$str9,0,0,'L');
   $pdf->Ln();

   $pdf->Cell(34,3.5,"",0,0,'L');//以下4行は、高さ3.5のスペースに文字列 $str10 を書きこむ。
   $pdf->Cell(57,3.5,$str10,0,0,'L');
   $pdf->Cell(34,3.5,"",0,0,'L');
   $pdf->Cell(57,3.5,$str10,0,0,'L');
   $pdf->Ln();


   $pdf->Cell(182,2,"",0,0);
   $pdf->Ln();

//1段2列の記述(終了)
}
$pdf->Output();
?>

以上で高さの合計が 275mm(55mmx5)、幅が 182mm になります。マージンを加えると、高さ 297mm 幅 210mm 即ち A4 用紙サイズになります。

この出力を印刷する時は、たとえばインターネットエクスプロ―ラーの場合、ファイル→印刷をクリックすると次のような画面が現れます。ここで「PDFのページサイズに合わせて用紙を選択」にチェックを入れ、「実際のサイズ」を選択します。これで意図した諸寸法を維持した印刷が可能になります。


補足説明

  1. 上掲のphpコードを通常のhtml構文の<body>~</body>内に納めると"Some data has already been output, can't send PDF file"というエラーメッセージが出ます。<?phpで始まり?>で終わる構文でなければなりません。<?phpの前にスペースがあっても駄目です。
  2. 名詞面の記述開始前に tfpdf() SetMargins() AddFont() AddPage() SetAutoPageBreak() SetTextColor() SetFont() 等が設定されていますが、実例の説明でほぼ足りていると思います。なおFPDF Library⇒Manual を開くと各項目の詳細説明が得られます(ただし英語)。またFPDFの全てのカラー設定はRGBでなされることも要注意です。例:(0,0,0)は黒(255,255,255)は白。
  3. 特にCellメソッドの使い方は重要なので、以下引数に応じて説明します。
    • 第1引数:幅
    • 第2引数:高さ
    • 第3引数:テキスト
    • 第4引数:枠線 0:枠なし 1:枠あり あるいは L(左)T(上)R(右)B(下)の組合せ(自由)。
      枠線の色はあらかじめ SetDrawColor(R,G,B) で規定できる。省いた場合は黒。
    • 第5引数:cellの位置 0:前のcellの右 1:前のcellの右、ただし改行が続く 2:前のcellの下
    • 第6引数:テキストの位置 L:左寄せ C:中央 R:右寄せ
    • 第7引数:背景色を塗る場合は true、ただし事前に SetFillColor(R,G,B) で背景色の指定が必要。塗らない場合は false またはこの引数を省略。
    • 第8引数:リンク、URL指定。不要であれば省略可。
  4. 文字サイズがスペースの高さ以上のときは文字サイズが優先します。1ptは1/72インチ(0.353mm)ですから、例えば、高さ5に納まるフォントサイズ14になります。



コメント


【admin】  2014年09月03日 11時28分

わかりやすい記事で大変参考になりました!
おかげでfpdfのUTF8化の問題解決しました。
ありがとうございました。