PHPでPDFを作成する定番ライブラリ【TCPDF】を使ってみた
Webシステムの開発をしていると「PDFの出力をしたい」というお話をよく聞きます。
今回はPHPでPDFを出力するためのライブラリ「TCPDF」を試していこうと思います。
目次
環境
今回の実装環境はこちらです。
CentOS 7
PHP Version 7.1.11
実装方法
では早速実装していきましょう。
まずは下記URLからライブラリをダウンロードし、ディレクトリに配置します。
ライブラリの配置が終わったら、index.phpを作成してライブラリを読み込みましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// ライブラリの読み込み require_once('TCPDF/tcpdf.php'); // TCPDFインスタンスを作成 $orientation = 'Landscape'; // 用紙の向き $unit = 'mm'; // 単位 $format = 'A4'; // 用紙フォーマット $unicode = true; // ドキュメントテキストがUnicodeの場合にTRUEとする $encoding = 'UTF-8'; // 文字コード $diskcache = false; // ディスクキャッシュを使うかどうか $tcpdf = new TCPDF($orientation, $unit, $format, $unicode, $encoding, $diskcache); |
ここからPDFの各種設定やデータ出力を行っていきます。
印刷ヘッダー・フッターを制御する
デフォルトでは印刷時のヘッダーやフッターを出力する設定になっており、PDFの上部・下部に罫線が引かれます。
これを制御するには下記のようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// ライブラリの読み込み require_once('TCPDF/tcpdf.php'); // TCPDFインスタンスを作成 $orientation = 'Landscape'; // 用紙の向き $unit = 'mm'; // 単位 $format = 'A4'; // 用紙フォーマット $unicode = true; // ドキュメントテキストがUnicodeの場合にTRUEとする $encoding = 'UTF-8'; // 文字コード $diskcache = false; // ディスクキャッシュを使うかどうか $tcpdf = new TCPDF($orientation, $unit, $format, $unicode, $encoding, $diskcache); // 印刷ヘッダーを表示しない $tcpdf->setPrintHeader(false); // 印刷フッターを表示しない $tcpdf->setPrintFooter(false); |
ページの余白を設定する
出力するPDFの余白は下記のように設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// ライブラリの読み込み require_once('TCPDF/tcpdf.php'); // TCPDFインスタンスを作成 $orientation = 'Landscape'; // 用紙の向き $unit = 'mm'; // 単位 $format = 'A4'; // 用紙フォーマット $unicode = true; // ドキュメントテキストがUnicodeの場合にTRUEとする $encoding = 'UTF-8'; // 文字コード $diskcache = false; // ディスクキャッシュを使うかどうか $tcpdf = new TCPDF($orientation, $unit, $format, $unicode, $encoding, $diskcache); // 余白を設定する(左, 上, 右 の順で設定 / 単位はコンストラクタで設定したものに準拠) $tcpdf->SetMargins(4, 4, 4); |
PDFのプロパティを設定
出力するPDFファイルの各プロパティを設定できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// ライブラリの読み込み require_once('TCPDF/tcpdf.php'); // TCPDFインスタンスを作成 $orientation = 'Landscape'; // 用紙の向き $unit = 'mm'; // 単位 $format = 'A4'; // 用紙フォーマット $unicode = true; // ドキュメントテキストがUnicodeの場合にTRUEとする $encoding = 'UTF-8'; // 文字コード $diskcache = false; // ディスクキャッシュを使うかどうか $tcpdf = new TCPDF($orientation, $unit, $format, $unicode, $encoding, $diskcache); // PDFファイルのタイトルを設定 $tcpdf->SetTitle('PDF Title'); // PDFファイルのサブタイトルを設定 $tcpdf->SetSubject('PDF Subject'); // PDFファイルの作成者を設定 $tcpdf->SetAuthor('PDF Author'); |
自動改ページを設定
自動改ページをONにすると、設定した引数の位置に到達した時点で次のページへ移動するようになります。
自動改ページを設定するには下記のようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// ライブラリの読み込み require_once('TCPDF/tcpdf.php'); // TCPDFインスタンスを作成 $orientation = 'Landscape'; // 用紙の向き $unit = 'mm'; // 単位 $format = 'A4'; // 用紙フォーマット $unicode = true; // ドキュメントテキストがUnicodeの場合にTRUEとする $encoding = 'UTF-8'; // 文字コード $diskcache = false; // ディスクキャッシュを使うかどうか $tcpdf = new TCPDF($orientation, $unit, $format, $unicode, $encoding, $diskcache); // 自動改ページをONにする $margin = 5; $tcpdf->SetAutoPageBreak(true, $margin); |
日本語を出力できるようにする
海外製のライブラリにありがちですが、そのままでは日本語が使えません。
日本語はフォントを設定することで表示することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// ライブラリの読み込み require_once('TCPDF/tcpdf.php'); // TCPDFインスタンスを作成 $orientation = 'Landscape'; // 用紙の向き $unit = 'mm'; // 単位 $format = 'A4'; // 用紙フォーマット $unicode = true; // ドキュメントテキストがUnicodeの場合にTRUEとする $encoding = 'UTF-8'; // 文字コード $diskcache = false; // ディスクキャッシュを使うかどうか $tcpdf = new TCPDF($orientation, $unit, $format, $unicode, $encoding, $diskcache); // 日本語フォントを有効にする $tcpdf->SetFont('kozminproregular', '', 10); |
画面に出力する
PDFをダウンロードさせるのではなく、画面に表示させるには下記のようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// ライブラリの読み込み require_once('TCPDF/tcpdf.php'); // TCPDFインスタンスを作成 $orientation = 'Landscape'; // 用紙の向き $unit = 'mm'; // 単位 $format = 'A4'; // 用紙フォーマット $unicode = true; // ドキュメントテキストがUnicodeの場合にTRUEとする $encoding = 'UTF-8'; // 文字コード $diskcache = false; // ディスクキャッシュを使うかどうか $tcpdf = new TCPDF($orientation, $unit, $format, $unicode, $encoding, $diskcache); // ファイルを出力 $fileName = 'sample.pdf'; $pdfData = $tcpdf->Output(rawurlencode($fileName), 'S'); // ブラウザにそのまま表示 header('Content-Type: application/pdf'); header("Content-Disposition: inline; filename*=UTF-8''".rawurlencode($fileName)); echo $pdfData; |
※IEの場合、ダウンロード時の日本語ファイル名が文字化けします。
PDFファイルをダウンロードさせる
直接ユーザーにPDFファイルをダウンロードさせるには、下記のようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// ライブラリの読み込み require_once('TCPDF/tcpdf.php'); // TCPDFインスタンスを作成 $orientation = 'Landscape'; // 用紙の向き $unit = 'mm'; // 単位 $format = 'A4'; // 用紙フォーマット $unicode = true; // ドキュメントテキストがUnicodeの場合にTRUEとする $encoding = 'UTF-8'; // 文字コード $diskcache = false; // ディスクキャッシュを使うかどうか $tcpdf = new TCPDF($orientation, $unit, $format, $unicode, $encoding, $diskcache); // ファイルを出力 $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; |
なお、こちらはIEでも日本語ファイル名が文字化けしません。
HTMLでレイアウトを作る
TCPDFにはHTMLでレイアウトを作成することができます。
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 |
// ライブラリの読み込み require_once('TCPDF/tcpdf.php'); // TCPDFインスタンスを作成 $orientation = 'Landscape'; // 用紙の向き $unit = 'mm'; // 単位 $format = 'A4'; // 用紙フォーマット $unicode = true; // ドキュメントテキストがUnicodeの場合にTRUEとする $encoding = 'UTF-8'; // 文字コード $diskcache = false; // ディスクキャッシュを使うかどうか $tcpdf = new TCPDF($orientation, $unit, $format, $unicode, $encoding, $diskcache); // HTMLレイアウトを作成 $html = <<< EOM <style> * { margin: 0; padding: 0; } th, td { white-space: nowrap; width: 40px; } table, th, td { border: solid 2px #000000; } </style> |
Apple | |
---|---|
Microsoft |
EOM; // HTMLをPDFに書き込む $tcpdf->writeHTML($html, true, true, true, true);
なお、HTMLタグが間違っていると綺麗にレイアウト出力できないので注意が必要です。
さいごに
結構主要な機能をご紹介しましたが、これらも機能の一部です。
細かい設定についてはコチラのサイトでご紹介されていますので、
気になる方は参照してみてください。
ではでは。
- おすすめ記事
-
-
のえる2019.04.23
-
Composerが使えない環境でComposer用のライブラリを使う方法
のえる2019.06.13
-
POPULAR
のえる
Full-stack Developer