サンプルプログラム

TCPDF – Cell 内のテキストを 改行なしで表示させるサンプルプログラム

TCPDF の Cell 内のテキストを 改行/折り返しせずに 自動でフォントサイズ調整するには?(PHP サンプル)

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 を使って FontSize0.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/