如何使用 mpdf 垂直居中文本

问题描述

如何在 mpdf 中的单个页面上垂直和水平居中文

(我知道答案,stackoverflow 只是让我写了一个更长的问题,以便允许将其与我的答案一起发布在这里...)

解决方法

虽然 mpdf 支持一些 css,但有一些东西无法让您通过 CSS 居中:

  • display: flex 不起作用
  • <table>height: 100% 不起作用
  • <div style="position: absolute; top: 50%; left: 50%;"></div> 不起作用

但是,我确实找到了一个技巧:$mpdf->hPt$mpdf->wPt 以磅为单位返回页面尺寸。
这意味着您可以使用带有 height: {$mpdf->hPt}pt; vertical-align: middle; text-align: center;:

的表格单元格
$mpdf = new \Mpdf\Mpdf($options);

$h = $mpdf->hPt;
$w = $mpdf->wPt;

$html = <<<HTML
<html>
<body style="margin: 0; padding: 0;">
<table style="width: {$w}pt; margin: 0; padding: 0;" cellpadding="0" cellspacing="0">
  <tr>
    <td style="height: {$h}pt; text-align: center; vertical-align: middle; padding: 0px 5px; margin: 0;">
      Hello World
    </td>
  </tr>
</table>
</body>
</html>
HTML;

$mpdf->WriteHTML($html);

显然,使用 dpi 自己计算该值是一种选择,但使用 mpdfs 计算可确保您对边缘情况进行相同的舍入和处理。