【技術解説】PHPでPDF出力機能を実装するにはTCPDFがおすすめ!概要や使用方法、注意点を知る
みなさんこんにちは。Wakka Inc.のベトナム拠点でテクニカルマネージャーを担当している鍋山です。
PHPのシステム開発を進めていく中で、「PHPで請求書や管理表をPDF出力したいが、どのようにすればいいのかわからない」という悩みで作業が止まってしまうエンジニアの方もいるのではないでしょうか。
WebアプリケーションからPDF出力する機会は少なくありません。
例えば、請求書を作成するサービスを構築する場合、必要事項をフォームに入力し、それをPDF形式でダウンロードできるようにする必要があります。そのほかにも、利用明細書やプレゼン資料などさまざまなものを挙げることができるでしょう。
PHPでPDF出力の機能を追加する際、TCPDFがおすすめです。今回は、TCPDFの基本概要と使用手順、注意点について解説しますので、興味のある方はぜひ参考にしてください。
開発リソース足りてますか?
ラボ型開発なら最適なプロジェクト体制で優秀な人材を低コストで確保できます。興味がある方は「【保存版】成長企業が導入するWakkaのラボ型開発」に詳しいサービス内容を掲載しているのでご覧ください。
お役立ち資料の無料DL
【資料DL】成長企業が導入するWakkaのラボ型開発
ラボ型開発や海外開発拠点の設立を検討されている方に向けて、『ラボ型開発の特徴』、『Wakka Inc.のサービスラインナップ』、『独自の海外子会社設立サービス』をご紹介しています。
こんな方におすすめ
・開発リソース不足に悩んでいる方
・ラボ型開発について検討をしたい方
・海外開発子会社のメリットについて知りたい方
TCPDFの基本概要
『TCPDF』とは、HTMLでPDF出力ができるようにしてくれる無料のオープンソースソフトウェアのことです。PHPクラスやライブラリといわれることもあります。外部ライブラリは必要なく、TCPDFをダウンロードしてファイルでインクルードすれば使用可能です。
“PHPでPDF出力するならTCPDF”といわれるほど、有名かつ人気のあるライブラリになります。2002年から開発されており、最新バージョンは2023年9月にリリースされたバージョン6.6.5です。TCPDFは認知度が高く、WebサイトからPDF出力したい機会は比較的多いため、覚えておくと便利なライブラリといえるでしょう。
TCPDFの使用手順
TCPの使用手順は、下記のように大きく2つにわけて解説します。
・ダウンロード
・実装
興味のある方は、ぜひ参考にしてください。
TCPDFのダウンロード方法
TCPDFは、GitHubの下記のURLからダウンロードすることができます。
https://github.com/tecnickcom/tcpdf
また、yumコマンドからダウンロードすることも可能です。
yum install php-tcpdf
yumでインストールすると/usr/share/php配下にダウンロードされます。そのため、ご自身の既存プロジェクトに移動させましょう。もし、/usr/share/php配下を確認しても見つからない場合、rpmコマンドで場所を確認してください。
rpm -gs php-tcpdf
TCPDFは、自身のプロジェクトの中に配置します。プロジェクトの中にlib等のファイルを作り、その中にコピーします。また、そのままプロジェクト配下に入れても問題ありません。今回のサンプルでは、下記のようにプロジェクト配下に配置しました。
project/tcpdf
TCPDFを実装しよう!
TCPDF実装の基本的な流れは、tcpdf.phpをインクルードし、TCPDFをインスタンス化、そして、各種設定を行い、最後にアウトプットするという流れです。それでは、具体的な実装手順について詳しく解説します。
1.tcpdfの読み込み
はじめに、tcpdf.phpを読み込みます。tcpdf.phpをインクルードする際は、正しいパス設定をしてください。今回のチュートリアルでは、同じ階層にtcpdf.phpがあるため、下記のようなパスになります。
require_once(‘tcpdf.php’);
2. TCPDFのインスタンス化
次は、TCPDFのインスタンス化です。
$pdf = new TCPDF($orientation,$unit,$format,$unicode,$encoding,$diskcache,$pdfa);
引数は全部で7つ指定することができます。指定しない場合は、すべて初期値です。
第1引数は、用紙の向きを設定します。縦にする場合はP、横にするときはLを入力してください。ちなみに、空欄に指定したときは、自動で方向が決められます。型はfloat、初期値は縦向きのPです。
第2引数では、測定単位を決めます。測定単位には、pt(ポイント)やmm、cm、in(インチ)の4種類から選択可能です。その中でも特にポイントには馴染みがありませんが、1ポイントあたり0.35mmに換算されます。タイポグラフィでは一般的な単位であり、印刷術の基本です。基本的にPDFを出力する際は、mmを指定します。そのため、初期値もmmです。
第3引数では、用紙サイズを設定します。用紙サイズとは、A4やB5というような縦と横の幅が決められた用紙のことです。型はstringで、初期値はA4となります。
第4引数は、ユニコードかどうかを決める部分です。初期値はtrueとなっています。
第5引数は、文字セットエンコーディングです。htmlをもとに戻すときに使われます。初期値は、UTF-8です。
第6引数は、非奨励機能になります。指定する必要がなく、初期値のfalseのままでいいです。
第7引数では、Aモードに設定するのかを決めます。基本的に初期値のfalseを設定しましょう。
サンプルでは、下記のように引数を設定しました。
$pdf = new TCPDF(‘P’, ‘mm’, ‘A4’,true, ‘UTF-8’,false,false);
3.新規ページを作成する
インスタンス化ができたら、次はaddPage関数を使って新しくページを追加します。関数の引数は、用紙の向きと用紙サイズ、余白設定、tocpageの設定です。サンプルでは、下記のようにすべて初期値としました。
$pdf ->addPage();
4.フォントサイズを指定する
フォントサイズは、setFont関数で指定します。指定できるフォントは、Helvetica-BoldやTimes-Roman、Times-Italicなどです。そのほかにも、setFont関数の第2引数でフォントスタイルを指定することもできます。
$pdf ->setFont(‘kozgopromedium’, ‘B’,10);
5.PDF出力する内容を変数に代入する
次は、PDF出力する内容を変数に代入します。HTML文章は、通常の文字列よりも長いので、ヒアドキュメントを使用するのがおすすめです。
$html = <<< EOF
HTML文章
EOF;
6.HTMLを書き込む
編集に代入したHTML文章を書き込みます。書き込みをする際は、writeHTML関数を使用してください。引数は、書き込む内容が代入されている変数を指定します。サンプルの場合は、$htmlです。
$pdf ->writeHTML($html);
7.最後にアウトプットして完了
最後にアウトプットして完了です。アウトプットは、Output関数を使用します。
$pdf ->Output(引数);
Output関数の第1引数は、出力時のファイル名の指定です。どのような名前で保存したいのかを決めて設定しましょう。基本的には、ファイル名がかぶらないように日付などを使用するのが一般的です。
第2引数は、どのような出力にするのかを指定します。I、D、F、Sの4種類から選択可能です。Iはブラウザに出力することを意味します。ブラウザにそのままPDFが表示されるという形です。Dはブラウザでダウンロードしたいときに設定します。また、ローカルファイルとして保存するときはFです。Sは文字列で出力するときに使いますが、あまり使用の機会は少ないでしょう。
TCPDFを使う際の注意点
TCPDFは基本的に簡単で、開発経験を持つエンジニアであれば、十分に使いこなすことができます。しかし、使用にはいくつかの注意点があります。注意点を知らずに実装するとエラーにはまってしまったり、思い通りの出力を得られなかったりする可能性もあるので、ぜひチェックしてください。
注意点①kozgopromediumを指定すること
1つ目の注意点は、setFont関数の第1引数でkozgopromediumを指定することです。TCPDFは日本語フォントの種類が少なく、デフォルトの状態のまま実行すると日本語が文字化けしてしまいます。そのため、デフォルト設定から必ず変更しなければならない部分です。
注意点②「¥」がバックスラッシュになる
2つ目の注意点は、半角の¥マークがバックスラッシュに変化されることです。PDF出力は請求書や領収書など、金額を表記する機会が多いため、知らないとエラーにはまってしまう可能性があります。¥マークを使用するときは、全角の¥マークを使うことで、バックスラッシュになってしまう問題を解決することが可能です。そのため、¥マークを使うときは、全角で入力するようにしてください。
TCPDFを覚えてPHPを使用したPDF出力をマスターしよう
今回は、PHPでPDF出力ができるTCPDFの基本概要や使い方の手順を解説しました。比較的ドキュメントが豊富にあるので、開発経験豊富なエンジニアであれば、使いこなすことは容易です。ぜひ、TCPDFを活用してPDF出力ができるWebアプリケーションを構築しましょう。
しかし、開発リソースが逼迫していてて今回のようなPDF出力機能の実装に限らず、社内の要望になかなか応えられないことに悩んでいる方も多いのではないでしょうか。
Wakka Inc.では、そのような方に向けて『海外子会社化もできる、オフショア・ラボ開発サービス』で
企画・開発・運用保守までトータル支援を行っていますので、リソースや開発ノウハウ不足に悩む方は、下記の問い合わせボタンからお気軽にお問い合わせください。
また、ラボ型開発について詳しく知りたい方は下記の記事をぜひご覧ください。
日系オンラインリサーチ会社のCTOとしてベトナムチームを立ち上げ、Wakka Inc.のテクニカルマネージャーとして参画。現在はベトナム拠点で開発チームの標準化や社内のインフラ管理・ITプロジェクト統括をやっています。モットーは『みんなで頑張りましょう』