let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【PHPでPDF見積もり作成】TCPDFを使った、フォーム入力内容を反映してPDF見積もり発行するシステム作った

更新: 2024/03/06 3061文字

今回は、TCPDFライブラリを使った、『フォームに入力した内容を反映してPDF見積もり発行するシステム』を作ってみたのでご紹介します。サーバーに動作するものはあげているのでチェックしていただくほか、特有のメソッドで便利なものを確認していきます。

TCPDFとは?

PDFを生成できるPHPライブラリです。他にもいろいろあるっぽいけど、PHP上級試験の参考書の題材になったりして、知名度は高そう。EC-CUBEやWordPressプラグインとして使われたりもしているそうです。

また、公式サイト内に実例が充実しており(英語ですが)、さまざまなメソッドで出力できます。座標指定などはかなりめんどくさいですけど、おススメはHTMLを渡せる『writeHTMLCellメソッド』あたりですかね。

また、この手のライブラリによくあることですが、古いバージョン(TCPDF 6.2.22 未満)での脆弱性が報告されているようです。管理人が使ったのは『6.6.5』だったのでセーフでした。『〇〇 vulnerabilities』で検索して調べたり、ディベロッパーサイトから最新のものをゲットして使うようにしましょう。

TCPDF PDF見積もり発行するシステム 実際の動作例(サーバーに上げてます)

ここでは、管理人が作ったPDF見積もり発行機能を確認していただきます。SSF(管理人が持っている著作権フリー曲サイト)に上がっていて、実際に操作していただいてokです。 なお、『著作権フリー曲サイトに楽曲アレンジを発注する』という想定ですが、メルアドなどは収集しておらず、管理人が追いかけ営業をすることはないので安心して使ってください。

まず、ページにアクセスするとフォームがあります。項目ごとに金額が設定されており、選択したものによって内部で計算します。

下の方には、入力内容リセットの他、確認ページへ飛ぶボタンも付けました。PDFを出す前に、実際の金額を確認できるようになっています。遷移先には$_SESSIONで内容を渡しますが、これ以降のページは『入力値がない状態で直接入っても、$_SESSIONのトークンが空なのでトップに飛ばされる』という感じになります(入力内容が残っているときは確認できます)。

確認画面です。『この項目入れると高ぇな』みたいなときは、発行前に戻って入力しなおしします。

その後はpdf生成ページに行ってダウンロードできます。名義は適当に入れたので気にしないでください。

また、TCPDFにファイル名指定するメソッドがあるんですけど($pdf->Outputみたいなメソッド)、これには時間を渡したりもできるようです。 以下のSSF内リンクで、実際の動作を確認してください。

ポイントになりそうなコードや組み込みメソッド

実際に作ったファイルは4~5ファイル程度ですがトータル500行くらいあるため、ポイントになりそうなコードや組み込みメソッドを紹介します。なお、参考にしたのは、TCPDF公式にあるexample_001でした。

入力内容は$_SESSIONで確認・生成ページに渡す(あとarray_sumで計算)

1ページで全部やってしまうのもアレなんで、確認・生成ページを作りましたが、これらのページには$_SESSIONで渡します。渡ってきたのはarray_sumで計算したりするほか、『$_POSTと$_SESSIONのトークンが一致するか』みたいな判定もできます。

日本語を使いたいときはSetFontメソッドで『kozminproregular/kozgopromedium』

海外のライブラリだけあって、そのまま日本語入りのPDFを生成しようとしても『?』になったりで、うまくいきません。また、日本語フォントをコマンドでインストールするのも一苦労。

ですが、搭載されている日本語フォントがあります。SetFontメソッドで『kozminproregular/kozgopromedium』で日本語も表示可能。上記の例では『kozminproregular』にしました。なお、このメソッドの後の空欄は $styleで、イタリックや太字などがあります。後ろの数字はフォントサイズです。

web系の人なら、writeHTMLCell / writeHTMLメソッドが使いやすい

座標を指定して出力などをいちいちやってると大変ですが、writeHTMLCell / writeHTMLでHTMLを出すとラクです。ただし対応タグは古いです(テーブルにcellspacing cellpaddingなど)

やり方はこんな感じで、ヒアドキュメントで変数を展開しつつ書いていって・・・

writeHTMLCellメソッド実行。exampleにあったパラメータまんまですが、(『$w(幅。0だと端まで?), $h(高さ、0だと全部?), $x(X座標), $y(Y座標), $html, $border(枠線), $ln(?), $fill(塗りつぶし), $reseth(?), $align(左や中央など配置), $autopadding(自動でパディング)』などが設定できるようす。

特にセルっていうこだわりがなければ、パラメータが少ない『writeHTMLメソッド』も使いやすいかと思います。

あとがき・まとめ

  • TCPDFライブラリでPDFを生成することができ、他アプリケーションに入っていることもある
  • フォームなどと連動する場合は$_SESSIONなどで処理ページの値渡しなどを行う
  • writeHTMLCell / writeHTMLメソッドだと、タグは古いがhtmlのように書けるので使いやすい

まとめるとこんなところでしょうか。座標指定してWriteとかだと大変ですが、上記のメソッドで使いやすくなりそうです。見積書だとビジネス利用がメインになるけど、PDFで冊子とか作ってみても面白そうです。


【カテゴリ】- PHP
【タグ】- ,

関連記事