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

(1/1)
PHPを使って、入力したテキストをPDFファイルとして出力するプログラムを作ってみる。
PHP 4.3以降には PDFlib lite が組み込まれていたが、その後、組み込まれなくなった。そこで、オープンソースのクラスライブラリ TCPDF を利用するようプログラムを改訂した。

(2022年3月26日)TCPDF対応のため大幅改訂,PHP8対応

サンプル・プログラムの実行例

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

サンプル・プログラム

圧縮ファイルの内容
pdfsamp.phpサンプル・プログラム本体

準備

クラスライブラリ TCPDF をダウンロードしたら、解凍し、include_path が通ったディレクトリに配置する。

  36: //PDF化するテキスト(デフォルト)(HTML文)
  37: define('DEF_SOUR', 'PHPを使って、入力したテキストをPDFファイルとして出力するプログラムを作ってみる。<br />PHP 4.3以降には<a href="https://www.pdflib.jp/">PDFlib lite</a>が組み込まれていたが、その後、組み込まれなくなった。そこで、オープンソースのクラスライブラリ<a href="https://github.com/tecnickcom/tcpdf">TCPDF</a>を利用するようプログラムを改訂した。');
  38: 
  39: //TCPDFクラス:include_pathが通ったディレクトリに配置
  40: //https://github.com/tecnickcom/tcpdf
  41: require_once('TCPDF/tcpdf.php');

解説:PDF出力

ユーザー関数 putPDF がPDFファイルへの出力処理を担当する。
まず、TCPDFインスタンスを作成する。続いて、タイトルや余白を設定する。
フォントの指定は SetFont メソッドを利用する。TCPDFで利用可能な日本語フォントは限られている。

PDF化したいテキストはHTML文としてレイアウト可能で、このHTML文をwriteHTMLメソッドに渡す。

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

 146: /**
 147:  * PDF出力する
 148:  * @param   string $str 出力文字列
 149:  * @param   string $errmsg エラー・メッセージ格納用
 150:  * @return  bool TRUE=成功/FALSE=失敗
 151: */
 152: function putPDF($str, &$errmsg) {
 153:     $orientation = 'Horizontal';    //用紙の向き
 154:     $unit = 'mm';                   //使用単位
 155:     $format = 'A4';                 //用紙サイズ
 156:     $unicode = TRUE;                //テキストはUnicodeかどうか
 157:     $encoding = 'UTF-8';            //文字コード
 158:     $diskcache = FALSE;             //ディスクキャッシュを使用するかどうか
 159: 
 160:     try {
 161:         //TCPDFインスタンスを作成
 162:         $tcpdf = new TCPDF($orientation, $unit, $format, $unicode, $encoding, $diskcache);
 163:         //PDFファイルのタイトル
 164:         $tcpdf->SetTitle('pdfsample');
 165:         //PDFファイルのサブタイトル
 166:         $tcpdf->SetSubject('subtitle');
 167:         //PDFファイルの作成者を設定
 168:         $tcpdf->SetAuthor('studio pahoo');
 169:         //余白設定:左, 上, 右
 170:         $tcpdf->SetMargins(20, 20, 20);
 171:         //日本語フォントの指定
 172:         $tcpdf->SetFont('kozminproregular', '', 12);
 173:         //新規ページ作成
 174:         $tcpdf->addPage();
 175:         //PDF化するHTMLテキストを作成
 176:         $html =<<< EOT
 177: {$str}
 178: 
 179: EOT;
 180:         //HTMLを書き込む
 181:         $tcpdf->writeHTML($html);
 182:         //PDFデータ出力
 183:         $fname = 'sample.pdf';
 184:         $pdfData = $tcpdf->Output(rawurlencode($fname), 'S');
 185:         $pdfLength = strlen($pdfData);
 186:     } catch (Exception $e) {
 187:         $errmsg = $e->getMessage();
 188:         return FALSE;
 189:     }
 190: 
 191:     //PDF出力処理
 192:     header('Content-type: application/pdf');
 193:     header('Content-Length:' . $pdfLength);
 194:     header('Content-Disposition: inline; filename=' . $fname);
 195:     echo $pdfData;
 196: 
 197:     $tcpdf = NULL;
 198: 
 199:     return TRUE;
 200: }

参考サイト

(この項おわり)
header