我在写文本之前用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 的内容向下推到适当的数量。