【发布时间】:2015-01-20 09:54:59
【问题描述】:
起初我认为 TCPDF 的 GetStringWidth() 不能正常工作,给我错误的宽度:
[---------------------------------------------- -------------------------------------------------- ----------------------]
我有一些文本,例如 $txt = "hallo"。
我尝试通过内置函数 GetStringWidth() 获取字符串宽度 然后创建一个具有字符串宽度的单元格。
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->setFontSubsetting(true);
$pdf->AddPage();
$pdf->SetFont('times', '', 20);
$pdf->SetCellPadding(0);
$txt = "hey i'm santa clause";
$width = $pdf->GetStringWidth($txt);
$pdf->Cell($width, $h=0, $txt, $border=1, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M');
$pdf->Output('example_001.pdf', 'I');
?>
但是,创建的单元格是其内容的缩写。 如果我尝试使用 courier 也可以正常工作。
我认为这是 GetStringWidth 没有正确处理字体宽度的衡量标准,因为 Courier 对每个字符都有相同的宽度,这是有效的。
如何让 GetStringWidth() 工作
[---------------------------------------------- -------------------------------------------------- ----------------------]
今天我尝试用 Firefox/Evince 而不是 chrome 打开它
结果如下: Firefox 在左边,chrome 在右边。
生成的PDF文件是v.1.7
使用的chrome版本:
google-chrome-beta (41.0.2272.53-1)
这里可能出了什么问题?真的是铬的错吗?还是我在这里遗漏了什么?
谢谢
【问题讨论】:
-
编辑代码 sn-p。现在是整个文档。添加 $pdf->SetCellPadding(0) 并在 $pdf->GetStringWidth() 之前设置 $pdf->setFont() 后仍然没有成功。
-
在 TCPDF 错误论坛中创建了一张票。它关闭了两次,没有任何真正的建议。作者说该方法运行良好,并被告知在常规 TCPDF 论坛中寻求帮助。也在那里发布了我的问题。到目前为止没有帮助
标签: google-chrome pdf pdf-generation tcpdf pdf-rendering