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

サンプル・プログラム
pdfsamp.php | サンプル・プログラム本体 |
準備
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出力
まず、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: }
参考サイト
- TCPDF :GitHub
- TCPDFマニュアル(勝手訳)
PHP 4.3以降には PDFlib lite が組み込まれていたが、その後、組み込まれなくなった。そこで、オープンソースのクラスライブラリ TCPDF を利用するようプログラムを改訂した。
(2022年3月26日)TCPDF対応のため大幅改訂,PHP8対応