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

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

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

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

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

サンプル・プログラム

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

準備

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

0036: //PDF化するテキスト(デフォルト)(HTML文)
0037: 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>を利用するようプログラムを改訂した。');
0038: 
0039: //TCPDFクラス:include_pathが通ったディレクトリに配置
0040: //https://github.com/tecnickcom/tcpdf
0041: require_once('TCPDF/tcpdf.php');

解説:PDF出力

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

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

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

0146: /**
0147:  * PDF出力する
0148:  * @param   string $str出力文字列
0149:  * @param   string $errmsgエラー・メッセージ格納用
0150:  * @return  bool TRUE=成功/FALSE=失敗
0151: */
0152: function putPDF($str, &$errmsg) {
0153:     $orientation = 'Horizontal';    //用紙の向き
0154:     $unit = 'mm';                   //使用単位
0155:     $format = 'A4';                 //用紙サイズ
0156:     $unicode = TRUE;             //テキストはUnicodeかどうか
0157:     $encoding = 'UTF-8';            //文字コード
0158:     $diskcache = FALSE;              //ディスクキャッシュを使用するかどうか
0159: 
0160:     try {
0161:         //TCPDFインスタンスを作成
0162:         $tcpdf = new TCPDF($orientation$unit$format$unicode$encoding$diskcache);
0163:         //PDFファイルのタイトル
0164:         $tcpdf->SetTitle('pdfsample');
0165:         //PDFファイルのサブタイトル
0166:         $tcpdf->SetSubject('subtitle');
0167:         //PDFファイルの作成者を設定
0168:         $tcpdf->SetAuthor('studio pahoo');
0169:         //余白設定:左, 上, 右
0170:         $tcpdf->SetMargins(20, 20, 20);
0171:         //日本語フォントの指定
0172:         $tcpdf->SetFont('kozminproregular', '', 12);
0173:         //新規ページ作成
0174:         $tcpdf->addPage();
0175:         //PDF化するHTMLテキストを作成
0176: $html =<<< EOT
0177: {$str}
0178: 
0179: EOT;
0180:         //HTMLを書き込む
0181:         $tcpdf->writeHTML($html);
0182:         //PDFデータ出力
0183:         $fname = 'sample.pdf';
0184:         $pdfData = $tcpdf->Output(rawurlencode($fname), 'S');
0185:         $pdfLength = strlen($pdfData);
0186:     } catch (Exception $e) {
0187:         $errmsg = $e->getMessage();
0188:         return FALSE;
0189:     }
0190: 
0191:     //PDF出力処理
0192:     header('Content-type: application/pdf');
0193:     header('Content-Length:' . $pdfLength);
0194:     header('Content-Disposition: inline; filename=' . $fname);
0195:     echo $pdfData;
0196: 
0197:     $tcpdf = NULL;
0198: 
0199:     return TRUE;
0200: }

参考サイト

(この項おわり)
header