You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 8.0+MPDF生成证书时,如何通过坐标与文本长度实现文本居中?

解决MPDF中用户名文本居中的问题

你当前的问题核心是用字符数量(strlen($name))代替了文本实际宽度,不同字符(比如中英文、不同字体)的显示宽度差异极大,这种计算方式完全无法匹配真实的文本占用空间,导致居中偏移。

正确的实现方式

MPDF内置了GetStringWidth()方法,能精准计算指定文本在当前字体、字号下的实际显示宽度(单位与MPDF坐标一致,默认是毫米),用这个值来计算居中坐标才是可靠的。

修改后的完整代码:

$mpdf = new \Mpdf\Mpdf(['orientation' => 'L']);
$mpdf->setSourceFile('storage/' . $certificate->url);
$certificatePDf = $mpdf->importPage(1);

$mpdf->useTemplate($certificatePDf, 0, 0, null, null, true);
$pageSize = $mpdf->getTemplateSize($certificatePDf);

// 必须先设置字体字号,再计算文本宽度(宽度与字体直接相关)
$mpdf->SetFont('Sanchez-Regular', '', 40); 
$textWidth = $mpdf->GetStringWidth($name); // 获取文本实际显示宽度
$centerX = $pageSize['width'] / 2 - $textWidth / 2;
$yPosition = 130;

$mpdf->WriteText($centerX, $yPosition, $name);
$mpdf->Output('newpdf.pdf');

额外注意事项

  • 确保Sanchez-Regular字体已正确注册到MPDF中,如果字体未加载,MPDF会自动使用默认字体替代,导致宽度计算错误。
  • 确认页面尺寸的单位与WriteText的坐标单位一致(MPDF默认单位为毫米,无需额外转换)。

内容的提问来源于stack exchange,提问作者Erick Sanabria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:01:13