はじめに

PHPでPDFのテンプレートファイルを読み込んで帳票を出力する方法をご紹介します。ライブラリは、TCPDFFPDIを使用します。

今回、ただ普通のサンプルコードを紹介するだけでは面白くないので、動作確認も兼ねてPDF履歴書を作成できるWebサイトを作ってみました。

こちら↓
PDF履歴書作成ツール | 登録不要でサクッとブラウザで作る!
web_resume_screen

本エントリーでは『PDF履歴書作成ツール』の中身を解説する形で、PHPでPDFテンプレートを読み込んでデータを書き込む方法をご紹介したいと思います。

クライアント側

Bootstrapを使用しています。

サーバ側

TCPDFのダウンロード
https://github.com/tecnickcom/tcpdf

FPDIのダウンロード
https://www.setasign.com/products/fpdi/downloads/

解説1)初期設定:10~28行目

ライブラリを呼び出し、 setSourceFile() でPDFテンプレートの読み込みや、用紙サイズ・フォントの設定などを行っています。

フォントはIPAのサイトからIPA明朝をダウンロードして使用しました。プロポーショナルフォントだと文字数の制御が面倒なので、等幅のフォントにしています。

解説2)座標値・文字サイズ定義:37~104行目

ここでは、各項目のXY座標値や文字サイズなどを設定しています。

最初は整数しか設定できないと思い微妙な位置ズレをどうしようかと調べた結果、小数も有効なことが分かってからは思い通りの位置に出力できるようになりました。

ちなみに、座標値を設定するときはIllustratorでPDFのテンプレートファイルを開いて位置を調べ(単位はピクセルではなくミリ)、後は実際に出力しながら微調整していくという作業を行いました。

解説3)出力処理:113~388行目

ここでブラウザから受け取ったデータをPDFに書き出していますが、主に使用しているメソッドは以下の2つです。

  • $pdf->SetFont() ・・・ テキストを出力する際のフォントを指定する
  • $pdf->Text() ・・・ テキスト文字列を出力する

SetFont() は文字サイズなどが変更になるタイミングで呼び出せば良いので、もし帳票内ですべて同一のフォントや文字サイズを使用する場合は最初に呼び出すだけで良いです。
従って、基本的には文字列を出力する Text() を駆使してPDFのテンプレートにデータを書き込んでいるということになります。なお、画像の書き出しには Image() を、複数行エリアでの出力では MultiCell() を使用しています。

最初に知っておきたかったこと・・

文字列を出力するメソッドとして Text() の他に Cell() があります。

  • $pdf->Cell() ・・・ 矩形領域(セル)を出力する

これは、中央寄せや右寄せなどアラインメントの指定を行う場合には必須のメソッドです。また、セルの名の通り表形式での書き出し時にも非常に便利で、今回 Cell() を使っておけばもっと簡単に書けただろうなという箇所がいくつもあるのですが、 Cell() メソッドの存在を知ったのが Text() で一通り書き終わった後だったので、書き直すのが面倒でそのままにしています・・。 Cell() だと文字がはみ出るのを制御することもできるので、最初にもっと調査するべきでした。。

結論:
①左寄せ、②文字数(桁数)が固定、③表形式ではない単発の出力箇所、の場合は Text() で問題ないが、基本的には Cell() を使ったほうが良い。

最後に

以上が、PHP(TCPDF + PDFI)でPDFテンプレートから帳票を出力する方法となります。

ネットで『PHP PDF 帳票』や『PHP PDF テンプレート』などと検索すると簡単なサンプルコードはいくつか出てくるのですが、あまり突っ込んだ内容のものはなかったので、実際にPDFを出力できるサイトを作ってみてそのコードを紹介するという形にしてみました。

実際に作成されるPDFを確認してみたい方はこちらをご覧ください↓

PDF履歴書作成ツール | 登録不要でサクッとブラウザで作る!
https://takahashi-it.com/web-resume/