【TCPDF+FPFI】PHPでpdf帳票を作成する方法【グラフも】
PHPでpdf帳票を作成する方法を紹介していきます。
「php pdf」等で検索するとほぼ間違いなくTCPDFが表示されると思います。
今回は帳票のテンプレートを利用したいのでTCPDFに加えてFPDIというpdfの読み込むことができるライブラリも利用します。
最後に簡単にPDF内にグラフを表示する方法も紹介します。こちらはphplotを使用しています。
TCPDF+FPDIで帳票作成
TCPDFとFPDIをダウンロードしましょう。
TCPDF: https://github.com/tecnickcom/TCPDF
FPDI: https://www.setasign.com/products/fpdi/downloads/
FPDIの方は[zip][tar][tgz]のどれかをクリックしてください。ダウンロードボタンではダウンロードできません。
ダウンロードできたらTCPDF内にfpdiフォルダを作成します。
fpdiフォルダ内にダウンロードしたFPDIのsrcフォルダ内のものをすべて放り込みます。(軽量化したい場合は必要なもののみコピーしてください。面倒くさい人はとりあえず全部。)
これで準備は完了です。
使い方
使い方は実際にコードで追った方がわかりやすいと思います。
use setasign\Fpdi\TcpdfFpdi;require_once('../TCPDF/tcpdf.php');require_once('../TCPDF/fpdi/autoload.php');// pdfのオブジェクト作成$tcpdf = new \setasign\Fpdi\Tcpdf\Fpdi("L", "mm", "A4", true, "UTF-8");// ヘッダーフッター無し$tcpdf->setPrintHeader(false);$tcpdf->setPrintFooter(false);// ページ追加$tcpdf->AddPage();// テンプレート読み込み$tcpdf->setSourceFile('../TCPDF/template/template_report.pdf');$tplIdx = $tcpdf->importPage(1);$tcpdf->useTemplate($tplIdx, null, null, null, null, true);// フォント設定$tcpdf->SetFont("helvetica", "", 10);$tcpdf->SetTextColor(255, 255, 255);$tcpdf->Text(100, 100, 12345);// PDF出力$tcpdf->Output('', "D");
詳しい利用方法は公式のサンプルで見た方がわかりやすいです。ケーズ別にまとめてあります。
ここでは簡単に解説します。
$tcpdf = new \setasign\Fpdi\Tcpdf\Fpdi("L", "mm", "A4", true, "UTF-8");
上記でTCPDFオブジェクトを生成しています。
初期値として「縦・横」「単位」「サイズ」など設定します。空にして後から個別に設定することも可能です。
$tcpdf->setPrintHeader(false);$tcpdf->setPrintFooter(false);
上記はデフォルトでオンになっているヘッダーフッターを無効にしています。
$tcpdf->AddPage();
上記でページを追加しています。この記述がないとページがない状態なのでうまく動かないと思います。
1ページと確定している場合は一回のみですが、複数ページにわたる可能性があるなら都度これでページ追加しましょう。
1$tcpdf->setSourceFile('../TCPDF/template/template_report.pdf');2$tplIdx = $tcpdf->importPage(1);3$tcpdf->useTemplate($tplIdx, null, null, null, null, true);
- 1行目・・・テンプレートファイルをセット。
- 2行目・・・セットしたテンプレートファイルの1ページ目を読み込み。返り値は文字列型のユニークID。
- 3行目・・・受け取ったユニークIDでテンプレートを読み込み。
この時点で出力すればテンプレートのみ出力される状態になります。
1$tcpdf->SetFont("helvetica", "", 10);2$tcpdf->SetTextColor(255, 255, 255);3$tcpdf->Text(100, 100, 12345);
- 1行目・・・フォントとタイプ、大きさ指定。fontは日本語を使用するなら「kozgopromedium」を指定すると出力可能。TCPDF/fonts内から使用できるフォントを指定可能。
- 2行目・・・テキストの色指定。
- 3行目・・・指定した座標にテキスト描画。
独自のフォントファイルを追加したい場合はターミナルからtcpdf_addfont.phpを実行することで略式名で指定可能になります。
コマンド例等は「tcpdf/tools/tcpdf_addfont.php」のファイル内に記述してあります。
$tcpdf->Output('', "D");
Outputで出力することが可能です。第二引数に指定するものでダウンロード、表示、文字列など取り扱いは様々です。
出力方法に関して「WordPressでTCPDFを使用した出力3パターン」で触れてますので参考にしてみてください。
phplotでグラフを入れる
phplotをダウンロードしましょう。https://github.com/AJRepo/PHPlot
解凍したフォルダ内のphpotフォルダを使用します。
require_once('../phplot/phplot.php');$data = [['2021/01/01',1234],['2021/01/02',5678],['2021/01/03',9012]];// PHPlotのインスタンスを生成$plot = new PHPlot(500, 300);// フォントを読み込む$plot->SetDefaultTTFont(dirname(__FILE__, 2) . '/assets/fonts/ipaexg.ttf');// 棒グラフ$plot->SetPlotType('bars');$plot->SetDataType('text-data');// グラフ・棒 平面$plot->SetShading(0);$plot->SetImageBorderType('none');// データをセット$plot->SetDataValues($graph_data);// 色設定$plot->SetDataColors('#64B5F6');// タイトル文字の大きさ変更$plot->SetFont('title', '', 12);$str = "売上高";$plot->SetTitle($str);.....// 保存設定$plot->setFileFormat('png');$plot->SetIsInline(true);$plot->setOutputFile(dirname(__FILE__) . '/output/graph.png');// 描画$plot->DrawGraph();
基本的には配列のデータで描画していくスタイルです。上の例ではグラフをpngとしてファイルに保存しています。
かなり細かく設定できるので、詳しい使い方は公式を参考にしてください。メモリ幅やメモリ内容、ラベルの大きさなどほとんどすべて設定することが可能です。
続いてこの保存したpngをファイルをTCPDFで読み込みます。
// グラフ挿入$tcpdf->Image('../output/graph.png', 32, 82, 145, 65, 'PNG');
保存しておいたファイルパスを指定し、座標、大きさ、形式をしてしています。
まとめ
グラフはjsで描画するものが多く、phpで完結している物があまりありませんでした。その中で簡単に利用できそうなものを探したらphplotにあたりました。コード内でファイルの保存まで出来るので便利です。
いろいろと複雑そうに見えますが、実際はそんなに複雑ではありません。簡潔なコードで出力まで試していき、徐々に見た目を調整していくのがおすすめです。