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ページと確定している場合は一回のみですが、複数ページにわたる可能性があるなら都度これでページ追加しましょう。
$tcpdf->setSourceFile('../TCPDF/template/template_report.pdf');
$tplIdx = $tcpdf->importPage(1);
$tcpdf->useTemplate($tplIdx, null, null, null, null, true);
- 1行目・・・テンプレートファイルをセット。
- 2行目・・・セットしたテンプレートファイルの1ページ目を読み込み。返り値は文字列型のユニークID。
- 3行目・・・受け取ったユニークIDでテンプレートを読み込み。
この時点で出力すればテンプレートのみ出力される状態になります。
$tcpdf->SetFont("helvetica", "", 10);
$tcpdf->SetTextColor(255, 255, 255);
$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にあたりました。コード内でファイルの保存まで出来るので便利です。
いろいろと複雑そうに見えますが、実際はそんなに複雑ではありません。簡潔なコードで出力まで試していき、徐々に見た目を調整していくのがおすすめです。