TCPDFでMulticellの正確な行数を取得する方法

久しぶりにはまりました。
TCPDFを使ってPDFを出力する際に、複数のMulticellの高さを合わせるために、
各セルの行数から最大値を取得したかったのですが、
TCPDFで用意されていたgetNumLines()getStringHeight()を使ってセルの行数や高さを取得すると何故か数値が安定せず。
どうやら改行を含むと正しく数値が取得できないようです。

どうしたものかとググって解決策見つけました!
ありがたやありがたや。

参考:TCPDF's getNumLines() is sometimes wrong
 

Multicellの正確な行数を取得する方法


// store current object
$pdf->startTransaction();
// get the number of lines
$lines = $pdf->MultiCell($w, 0, $txt, 0, 'L', 0, 0, '', '', true, 0, false,true, 0);
// restore previous object
$pdf = $pdf->rollbackTransaction();

複数のMulticellの高さを揃える方法


$lines = array();
// store current object
$pdf->startTransaction();
// get the number of lines
$lines[] = $pdf->MultiCell($w, 0, $txt1, 0, 'L', 0, 0, '', '', true, 0, false,true, 0);
$lines[] = $pdf->MultiCell($w, 0, $txt2, 0, 'L', 0, 0, '', '', true, 0, false,true, 0);
$lines[] = $pdf->MultiCell($w, 0, $txt3, 0, 'L', 0, 0, '', '', true, 0, false,true, 0);
$lines[] = $pdf->MultiCell($w, 0, $txt4, 0, 'L', 0, 0, '', '', true, 0, false,true, 0);
// restore previous object
$pdf = $pdf->rollbackTransaction();

$linecount = max($lines);

$h = 5 * $linecount;

//高さを指定して実際に出力
$pdf->MultiCell($w, $h, $txt1, 0, 'L', 0, 0, '', '', true, 0, false,true, 0);
$pdf->MultiCell($w, $h, $txt2, 0, 'L', 0, 0, '', '', true, 0, false,true, 0);
$pdf->MultiCell($w, $h, $txt3, 0, 'L', 0, 0, '', '', true, 0, false,true, 0);
$pdf->MultiCell($w, $h, $txt4, 0, 'L', 0, 0, '', '', true, 0, false,true, 0);
Comments

コメントする