TCPDF的getNumLines()有时是错误的


TCPDF's getNumLines() is sometimes wrong

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

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

在我的测试中,$lines是 3,而只打印了 2 行。如果我将$width增加一点,我会得到正确的值。第一行是较长的。所以最后不可能是非印刷字符被包裹。

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

TCPDF 版本: 5.9.156

在tcpdf的bugtracker的这张票的评论中还描述了另一种技术,听起来很有前途:

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

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

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

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

最后修复了

TCPDF中"脏"html字符串表的相同错误。JohJoh关于10 => 0,13 => 0的回答使我朝着正确的方向前进。我将其更改为 10 => 8750、13 => 8750,以将其他 td 的内容向下推到适当的数量。