TCPDF的getNumLines()有时是错误的

时间:2012-06-08 16:42:01

标签: php pdf tcpdf

我在写文本之前使用getNumLines()估计行数,因为必须相应地定位。 似乎getNumLines()为MultiCell()实际需要的文本计算了更多空间。使用MultiCell()书写时,仍然适合单元格的长行似乎是由getNumLines()软包裹的:

$lines = $pdf->getNumLines($text, $width);
$pdf->MultiCell($width, 50, $text, 0, "L");

在我的测试中$lines是3,而只打印了2行。如果我增加$ width,我会得到正确的值。它是第一条较长的线。所以它最终不能是非打印字符。

也许是因为我传递给MultiCell()的对齐参数“L”?但getNumLines() ......有什么建议吗?

TCPDF版本:5.9.156

3 个答案:

答案 0 :(得分:2)

tcpdf的bugtracker this ticket的评论中描述了另一种技术,这听起来非常有用:

  

如果您想知道确切的行数,您必须使用以下内容   技术:

// 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();

答案 1 :(得分:1)

哈!发现错误:getNumLines()计算换行和回车的空间。

为了避免这种情况,我编辑了字体定义文件:有一个名为$cw的数组,用于定义每个字符的宽度。我添加了两个条目:10 => 0, 13 => 0来设置换行符的宽度和回车符。

答案 2 :(得分:0)

最后修复了TCPDF中'脏'html-string表的相同错误。 JohJoh的回答是关于10 => 0,13 => 0让我朝着正确的方向前进。 我把它改为10 => 8750,13 => 8750将其他td的内容推低到合适的数量。