PHP でPDFファイルを作成する

(1/1)
PHP では、PDF ファイルを出力できるPDFLibというライブラリが用意されている。
PHP 4.4 以降ではフリー版が組み込まれているので、今回は、これを使って PDF ファイルを作ってみることにする。

サンプル・プログラム

サンプル・プログラムは、フォームから入力された1行のテキストを PDF に出力するという簡単なものである。

サンプル・プログラムの解説

すべての内部処理はシフト JIS にしておく。

0013: /**
0014:  * PDF出力する
0015:  * @param string $str 出力文字列
0016:  * @return bool TRUE=成功/FALSE=失敗
0017: */
0018: function put_pdf($str) {
0019:     //PDF出力準備
0020:     $pdf = pdf_new();
0021:     pdf_open_file($pdf);
0022:     $font = pdf_findfont($pdf, 'HeiseiKakuGo-W5', '90ms-RKSJ-H', 0); //フォント指定
0023: 
0024:     //PDFページを作成する
0025:     pdf_begin_page($pdf, 595, 842);      //A4判縦
0026:     pdf_setfont($pdf$font, 14);        //フォントサイズ 14pt
0027:     pdf_set_text_pos($pdf, 40, 792); //描画開始位置指定
0028:     pdf_continue_text($pdf$str);
0029:     pdf_end_page($pdf);
0030: 
0031:     //PDFファイルを閉じる
0032:     if (pdf_close($pdf) == FALSE)   return FALSE;
0033:     $buf = pdf_get_buffer($pdf);         //生成されたPDFデータを取得
0034: 
0035:     //PDF出力処理
0036:     $pdf_length = strlen($buf);
0037:     $pdf_name = "keisan.pdf";
0038:     header("Content-type: application/pdf");
0039:     header("Content-Length:" . $pdf_length);
0040:     header("Content-Disposition: inline; filename=" . $pdf_name);
0041:     echo $buf;
0042: 
0043:     pdf_delete($pdf);
0044: 
0045:     return TRUE;
0046: }

ユーザー関数 put_pdf が PDF ファイルへの出力処理を担当する。
まず、PDF 処理を開始するために、 pdf_new  関数を使って PDF リソース $pdf を用意する。
次に  pdf_open_file  関数を使って PDF オブジェクトをオープンする。
フォントの指定は  pdf_findfont  関数を利用する。第2 引数で「平成角ゴシック W5」を指定している。とくに日本語フォントの場合、クライアント側にインストールされている Acrobat のバージョンによって異なるので注意されたい。Acrobat 6 以降であれば、HeiseiKakuGo-W5 でゴシック体が表示されるはずである。

 pdf_findfont  関数の第3 引数では、エンコード方式を指定する。Windows で利用できるすべての文字を指定するには 90ms-RKSJ-H を指定する。この際、PHP の内部処理を Shift_JIS にしておく必要がある。

次に、 pdf_begin_page  関数を使って PDF の新しい 1 ページを生成する。
第2 引数と第3 引数でページの大きさを指定するが、ここでは A4 判縦を指定している。
PDFLib では、ページサイズや文字位置指定をポイントで行う点に注意が必要だ。ミリからポイントへの変換式は以下の通り。
(ミリ)÷ 25.4 × 72.0 =(ポイント)


フォントサイズは  pdf_setfont  関数を使う。  pdf_findfont  関数によって指定されたフォントは、ここではじめて効力を発揮する。

 pdf_set_text_pos  関数を使って、文字列の描画開始位置を指定する。数字はポイントである。また、PDF ファイルの座標系は、左下が原点 (0, 0) になることに注意されたい。

文字列は  pdf_continue_text  関数を使って PDF ファイルに描画する。この段階では、まだ画面には表示されない。
 pdf_end_page  関数を使ってページをクローズし、さらに  pdf_close  関数を使ってオブジェクトをクローズする。

 pdf_get_buffer  関数を使って PDF オブジェクト・データを取得したら、あとは  header  関数を使って画面に表示する。
この際、ブラウザ側で PDF のアプリケーション紐付けが行われていない(Acrobat がインストールされていない、等)と、ファイルとしてダウンロードすることになる。

参考サイト

(この項おわり)
header