【PHP】PDFでテンプレートに文字表示するあれこれ【TcpdfFpdi】

LaravelでPDF出力をする際にtcpdfを用いてあれこれしたときのメモ
素のPHPでも使えるはず

パッケージをインストール

composer require tecnickcom/tcpdf

出力するコード

  • Controllerに直接記載するでも、Serviceクラスを作って汎用化するでもOK
<?php
namespace App\Services;

// 上部でパッケージを読み込む
use setasign\Fpdi\TcpdfFpdi;

class FileService
{
    exportPdf()
    {
        // まずは初期設定 
        $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);

        $pdf->setFont('kozgopromedium');

        // 文字を出力
        $pdf->SetXY(164, 42); // 座標軸で位置を指定
        $pdf->Write(0, '出力する文字列です'); // 文字を指定 (第一引数はLineHeight)

        // ファイル出力
        $this->outputPdf($pdf, 'ダウンロードされるファイル名.pdf');
     }
}

補足
  • 今回PDFのテンプレートはresource_path()で読み込むので下記に配置してる
    /resources/pdf/*

文字色を変える場合

$pdf->SetXY(95, 5); // 座標軸で位置を指定
$pdf->SetTextColor(245,245,245); // 文字色をrgbで指定
$pdf->Write(0, '白色の文字です'); // 文字を出力

文字をセンターに配置する場合

$text = '出力する文字列です';
// 文字列の長さを取得
$textWidth = $pdf->GetStringWidth($text);
// 長さから中央の座標軸を取得
$x = ($pageWidth - $textWidth) / 2;
$y = $pageHeight / 2;
// 中央座標を指定して出力
$pdf->Text($x, $y, $text);

// y軸は指定してx軸だけセンタリングしたい場合
$pdf->Text($x, 72, $text);

// x軸は指定してy軸だけセンタリングしたい場合
$pdf->Text(30, $y, $text);

\ 案件のご依頼・ご相談はこちらから /