/

【TCPDF+FPFI】PHPでpdf帳票を作成する方法【グラフも】

【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ページと確定している場合は一回のみですが、複数ページにわたる可能性があるなら都度これでページ追加しましょう。

$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パターン」で触れてますので参考にしてみてください。

注意

※テンプレートファイルのpdf形式は最新のものだと動きません。pdf1.4に変更する必要があります。

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にあたりました。コード内でファイルの保存まで出来るので便利です。

いろいろと複雑そうに見えますが、実際はそんなに複雑ではありません。簡潔なコードで出力まで試していき、徐々に見た目を調整していくのがおすすめです。


<