使用 {PAGE_NUM} 对页面进行编号时,使 dompdf 跳过第一页

make dompdf skip first page when numbering pages with {PAGE_NUM}

我有下面的代码,可以完美地将页码添加到文档右下角的每个页面。

我有一个不需要页码的 header 页面,所以想跳过它的页码。

有办法吗?或者至少将代码修改为 page_num+1、page_count-1,然后 div 在 header 页面上使其不显示?

$dompdf->render();
$canvas = $dompdf->get_canvas();
$font = Font_Metrics::get_font("helvetica", "bold");
$canvas->page_text(522, 770, "Page: {PAGE_NUM} of {PAGE_COUNT}", $font, 10, array(0,0,0));

您不能使用 page_text() 方法执行此操作,因为此方法会在所有页面上应用指定的文本。您想要使用的是 page_script() 方法,它为您提供类似于 dompdf 的嵌入式脚本的功能,运行 在所有页面上。

由于您只需减去第一页,因此您只需从当前页和总页数中减去一页即可获得正确的页码。

在 dompdf 0.6.2 或更早版本中尝试以下操作:

$dompdf->render();
$canvas = $dompdf->get_canvas();
$canvas->page_script('
  if ($PAGE_NUM > 1) {
    $font = Font_Metrics::get_font("helvetica", "bold");
    $current_page = $PAGE_NUM-1;
    $total_pages = $PAGE_COUNT-1;
    $pdf->text(522, 770, "Page: $current_page of $total_pages", $font, 10, array(0,0,0));
  }
');

从 dompdf 0.7.0 开始,情况有些不同:

$dompdf->render();
$canvas = $dompdf->getCanvas();
$canvas->page_script('
  if ($PAGE_NUM > 1) {
    $font = $fontMetrics->getFont("helvetica", "bold");
    $current_page = $PAGE_NUM-1;
    $total_pages = $PAGE_COUNT-1;
    $pdf->text(522, 770, "Page: $current_page of $total_pages", $font, 10, array(0,0,0));
  }
');

已接受的答案对我不起作用。为什么不只检查页码并忽略第一页?像这样

$pdf->page_script ('
if ($PAGE_NUM != 1) {
    $current_page = $PAGE_NUM;
    $pdf->text(550, 750, "Page $current_page", null, 10, array(0,0,0));
 }

');

这与 相同,但借助于带有静态函数的 class,因此我们不必在字符串中进行编码。

Class

<?php

namespace App\Services;

use Dompdf\Canvas;
use Dompdf\FontMetrics;

class PdfService
{
    public static function outputPageNumbers(Canvas $pdf, FontMetrics $fontMetrics, $PAGE_NUM, $PAGE_COUNT) {
        if ($PAGE_NUM > 1) {
            $font = $fontMetrics->getFont("helvetica", "bold");
            $current_page = $PAGE_NUM-1;
            $total_pages = $PAGE_COUNT-1;
            $pdf->text(522, 770, "Page: $current_page of $total_pages", $font, 10, array(0,0,0));
        }
    }
}

并使用 page_script

调用静态函数
$dompdf->render();
$canvas = $dompdf->getCanvas();
$canvas->page_script(
    '\App\Services\ProductPdfsService::outputPageNumbers($pdf, $fontMetrics, $PAGE_NUM, $PAGE_COUNT);'
);