はじめに
帳票の印刷など、プログラムでPDFを出力する機会は比較的多くあります。LaravelでPDFを簡単に出力できるので、その方法をご紹介します。
TCPDFとFPDIをインストール
composerでインストールします。
composer require tecnickcom/tcpdf
composer require setasign/fpdi
ControllerでPDFを出力
use setasign\Fpdi\TcpdfFpdi;
use TCPDF_FONTS;
public function createPdf()
{
$pdf = new TcpdfFpdi();
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->SetAutoPageBreak(false);
$pdf->SetMargins(0, 0, 0);
$pdf->addPage();
// テンプレートを読み込む
$template_path = resource_path('pdf/template.pdf');
$pdf->setSourceFile($template_path);
$page = $pdf->importPage(1);
$pdf->useTemplate($page);
// フォントを設定(MS明朝)
$tcpdf_fonts = new TCPDF_FONTS();
$font = $tcpdf_fonts->addTTFfont(resource_path('fonts/msmincho.ttf'));
// テキストを出力
$pdf->SetXY(100, 50);
$pdf->Write(0, 'テスト');
// PDFをS3に保存
$content = $pdf->Output('test.pdf', 'S');
Storage::disk('s3')->put('test.pdf', $content, 'private');
}
テキストの出力について
テキスト以外にも楕円や画像などを出力することもできます。
楕円
$pdf->Ellipse($x, $y, $rx, $ry);
パラメータ
$x ・・・中心点のX座標
$y ・・・中心点のY座標
$rx・・・水平方向の径
$ry・・・垂直方向の径(0とすると円になる)
画像
$pdf->Image($file, $x, $y, $w, $h);
パラメータ
$file・・・画像ファイル名
$x ・・・左上のX座標
$y ・・・左上のY座標
$w ・・・幅
$h ・・・高さ
保存先について
PDFをS3に保存したい場合はOutputの第2引数に「S」を指定します。
出力先は以下から選択できます。
I ・・・ブラウザに出力する。
D・・・ブラウザでダウンロードする。
F ・・・ローカルファイルとして保存する。
S ・・・文字列で出力する。
おわりに
今回はテンプレートを使ってPDF出力しましたが、HTMLをPDF出力することもできます。ただ、使用できるCSSが限定的なので使い勝手はあまり良くないようです。
LaravelでPDF出力するライブラリとしてはlaravel-dompdfやlaravel-snappyなども人気があります。
機会があればご紹介したいと思います。