返回

Yii2 mPDF 设置页脚仅显示在最后一页?巧用这个方法轻松解决

php

Yii2 mPDF:巧妙设置页脚仅显示在最后一页

前言

大家好,我是**[你的名字]** ,一位经验丰富的程序员和技术作家。今天,我想和大家分享一下我最近在使用 Yii2 mPDF 库遇到的一个问题,以及我如何找到解决方案的。

问题:页脚只显示在最后一页

在使用 mPDF 库生成 PDF 时,我遇到了一个令人头疼的问题:页脚只显示在最后一页。我原本按照官方文档中给出的示例设置了页脚,但始终无法如愿。

经过一番调查,我发现问题出在了设置页脚的时机上。在原始代码中,页脚是在 PDF 内容写入之后才设置的。这导致页脚被覆盖,无法在除最后一页之外的其他页面上显示。

解决方案:调整设置页脚的时机

为了解决这个问题,我将设置页脚的时机调整到了 PDF 内容写入之前。以下是修改后的代码:

public function genPdf($content, $css = '', $footer = [], $additionals = [], $watermark = "")
{
    ...
    if ($footer) {
        $this->SetFooter($footer);
    }
    ...
    $stylesheet = file_get_contents(Yii::getAlias('@frontend') . '/web/css/bootstrap3.7.min.css');
    $stylesheet .= $css;
    $this->WriteHTML($stylesheet, 1);
    $this->WriteHTML($content, 2);
    ...
}

通过将 SetFooter 方法移到内容写入之前,页脚得以在 PDF 生成过程中正确渲染到每一页。

其他注意事项

除了调整设置页脚的时机之外,还需要注意以下几点:

  • 确保 $footer 数组中包含页脚内容。
  • 页脚内容必须符合 HTML 标准。
  • 可以使用 SetFooterByPage 方法为不同页面设置不同的页脚。

完整示例

以下是使用 Yii2 mPDF 库设置页脚的完整示例:

控制器:

private function footer()
{
    ...
    return $footer;
}

private function outputPDF($fileName, $content, $cssFilePath, $overrideConfig = [], $additionals = [], $watermark = "")
{
    $mpdf = new NgMpdf('utf-8', 'A4', 12, 'thsarabunnew', $left = 18, $right = 13, $top = 8, $bottom = 8, $mgh = 5, $mgf = 2, 'P');

    $mpdf->showWatermarkText = true;
    $mpdf->filename = $fileName . ".pdf";
    $mpdf->title = $fileName;

    $customCssContent = $this->getBasePdfCss();
    if (!empty($cssFilePath)) {
        $customCssContent .= file_get_contents($cssFilePath);
    }

    $mpdf->SetFooter($this->footer());
    $mpdf->genPdf($content, $customCssContent, [], $additionals, $watermark);
}

结论

通过调整设置页脚的时机,我成功地解决了页脚只显示在最后一页的问题。希望这个解决方案也能帮助到遇到同样问题的开发者。

常见问题解答

  • 为什么页脚不显示在所有页面?

    • 确保页脚内容符合 HTML 标准,并且设置页脚的时机正确。
  • 如何为不同页面设置不同的页脚?

    • 使用 SetFooterByPage 方法指定不同页面的页脚内容。
  • 如何添加页码到页脚?

    • 使用 {PAGENO}{nbpg} 占位符在页脚中添加页码。
  • 如何调整页脚的位置?

    • 使用 SetHeaderTopSetHeaderBot 方法调整页脚的垂直位置。
  • 如何自定义页脚的字体和样式?

    • 使用 CSS 规则设置页脚的字体、大小和颜色。