PHPでPDF出力 定番とされるTCPDFを使ってみる
|PHPでウェブアプリを作る際、PDFで出力をする場面が求められることが多々あります。
PDFの生成が出来ると、各帳票の生成も可能となり自由度が一気に増します。
試しにと使ってみたのがTCPDFというライブラリ。インストール不要とのことで気軽に利用できるか、試してみます。
1.TCPDFのダウンロード。downloadボタンよりZIPファイルをダウンロード。
2.解凍したら、フォルダ名を「tcpdf」にリネーム。
3.ウェブサーバーへアップロード。
4.tcpdfフォルダ直下にあるtcpdf.phpをインクルードして使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<?php include($_SERVER['DOCUMENT_ROOT'] . '/tcpdf/tcpdf.php'); // include_path配下に設置したtcpdf.phpを読み込む $tcpdf = new TCPDF(); $tcpdf->AddPage(); // 新しいpdfページを追加 $tcpdf->SetFont("kozgopromedium", "", 10); //日本語フォント。デフォルトで用意されたもの。 $html = <<< EOF <style> h1{ font-size: 32px; //文字の大きさを指定 color: #ff0000; //文字の色を指定 text-align: center; //テキストの位置を指定 } p{ font-size: 13px; color: #000000; text-align: left; } </style> <h1>PDFサンプルファイル</h1> <p>インストールを必要としないTCPDFを使ってもPDFファイル。</p> <p>PDFの生成が出来ると、各帳票の生成も可能となり自由度が一気に増します。</p> EOF; $tcpdf->writeHTML($html); //表示htmlを設定 $tcpdf->Output('sample.pdf', 'I'); //ファイル名を指定。 ?> |
5.上記ソースを記述したファイルをアップロード。あらら簡単。見事にPDFが生成されています。
6.文字化けもいくつか報告があるようですが、ファイル生成時の文字コードはUFT-8であることがお勧めの様です。
7.アクセス時、PDFをダウンロードさせたい場合は、下記の第二引数を”D”にする。
1 |
$tcpdf->Output('sample.pdf', 'D'); |
とても簡単ですね。お試しください。
TCPDF各種設定
スタンダートと呼んでも良いだろうと思われる設定は以下の通り。
1 2 3 4 5 6 7 |
$orientation = 'Portrait'; // 用紙の向き Portrait(縦)OR Landscape(横) $unit = 'mm'; // 単位 $format = 'A4'; // 用紙フォーマット $unicode = true; // ドキュメントテキストがUnicodeの場合にTRUEとする $encoding = 'UTF-8'; // 文字コードの設定 $diskcache = false; // ディスクキャッシュを使うかどうかを指定 $tcpdf = new TCPDF($orientation, $unit, $format, $unicode, $encoding, $diskcache); |
フッターとヘッダーの罫線を
1 2 3 4 5 |
// 印刷ヘッダーを表示しない $tcpdf->setPrintHeader(false); // 印刷フッターを表示しない $tcpdf->setPrintFooter(false); |
自動改ページ
1 2 3 |
// 自動改ページをONにする $margin = 5; $tcpdf->SetAutoPageBreak(true, $margin); |
日本語フォント(デフォルトで使えるもの)
1 2 3 4 |
$tcpdf->SetFont("cid0jp", "", 10); //kozgopromedium //kozminproregular //cid0jp |
改ページタイミング
帳票など一度に複数の帳票を出力する際、テキストの長さにとらわれず、一定の箇所にて改ページ処理を行いたいもの。それが以下のソースを置くことで実現。
1 |
<br pagebreak="true"/> |
ブラウザにそのまま表示
1 2 3 |
header('Content-Type: application/pdf'); header("Content-Disposition: inline; filename*=UTF-8''".rawurlencode($fileName)); echo $pdfData; |
PDFファイルをダウンロード
1 2 3 4 5 6 7 8 |
// ファイルを出力 $fileName = 'sample.pdf'; $pdfData = $tcpdf->Output(rawurlencode($fileName), 'S'); // ダウンロードさせる header('Content-Type: application/octet-stream', false); header("Content-Disposition: attachment; filename*=UTF-8''".rawurlencode($fileName)); echo $pdfData; |
出力・保存・ダウンロード設定
1 2 3 4 5 |
$filename = $date.".".$auction_code.".pdf"; $filePath = "../Folder/".$filename; $tcpdf->writeHTML($html); //表示htmlを設定 $tcpdf->Output($filePath, 'F'); //F(保存)、I(表示)、D(ダウンロード)pdf表示設定 |
複数ファイルを保存する
複数ファイルを保存するスクリプト。サンプルは以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php include($_SERVER['DOCUMENT_ROOT'] . '/tcpdf/tcpdf.php'); for($i=0; $i<5; $i++){ $tcpdf = new TCPDF(); $tcpdf->AddPage(); // 新しいpdfページを追加 $tcpdf->SetFont("kozgopromedium", "", 10); $html = <<< EOF <h2>資料</h2> <p>{$i}</p> <br pagebreak="true"/> EOF; $FileName = $i."abc.pdf"; $tcpdf->writeHTML($html); $tcpdf->Output($FileName, 'F'); } ?> |