TCPDF の Cell メソッドで、列幅が狭くても 折り返し/改行なしで(フォントサイズを小さくすることで)Cell に収まるように全体表示させる PHP サンプルプログラムをご紹介いたします。
※参考サイトは最下部にまとめております。
目次
TCPDF – Cell メソッドとは?
TCPDF – Cell メソッドは、PDF 内に矩形領域(セル)を出力します。
例えば、TCPDF オブジェクトを $objTCPDF、幅を $intWidth、高さを $intHeight、テキストを $strText で定義した場合には、こんな風に書きます…
$objTCPDF->Cell($intWidth, $intHeight, $strText, "TRBL");
Cell 幅で全体表示できるように FontSize を調整する
PDF のレイアウトが決まっており、そこに法人名や住所などの可変長テキストを出力する場合 テキストが長くなってしまう場合には 改行させるのが通例ですが(プログラムも複雑になりますし)改行なしで出力できるようにしたい!という場合には(クライアント様の OK があれば)フォントサイズを少しずつ小さくしていって、表示領域ピッタリのサイズでテキスト出力するという手法で プログラムを簡単化することが可能です。
GetStringWidth でテキストの幅を測る
TCPDF オブジェクトには GetStringWidth というメソッドがあり、出力しようとする文字列が実際に何mmの幅になるのか?という値を求められるようになっています。
例えば出力しようとする幅が 40mm だとして、そこに「東京都千代田区九段下」という文字が収まるか否か?は、40mm と $objTCPDF->GetStringWidth(“東京都千代田区九段下”) を比較することで 結果を予め得ることができます。
PHP サンプル
例えば、上記の例で、フォントサイズが本来 11px の場合には、for を使って FontSize を 0.5 ずつ小さくしていき(GetStringWidth を使用して)Cell の幅に収まるところで表示させるサンプルは こんな感じになります…
//フォントサイズを 11 から 0.5 ずつ小さくする
for ($sngFontSize = 11; $sngFontSize >= 1; $sngFontSize -= 0.5){
//フォントサイズを変更する
$objTCPDF->SetFontSize($sngFontSize);
//テキスト出力幅が目的の幅以下であればループを抜ける
if ($objTCPDF->GetStringWidth($strText) <= $intWidth) break;
}
//Cell 出力する
$objTCPDF->Cell($intWidth, $intHeight, $strText, "TRBL");
//フォントサイズを元に戻す
$pdf->SetFontSize(11);
TCPDF クラスを拡張して CellAuto メソッドなどを作っておくと もっと楽になりそうですね!
参考サイト
TCPDF – SetFont (ipag.ttf) で太字が使えない ~ クラス拡張で解決する
https://blog.soln-sns.net/tcpdf-setfont-bold-does-not-work-for-japanese-font-php-sample-extends-class/