使用{PAGE_NUM}为页面编号时,make dompdf跳过第一页

时间:2016-02-18 20:04:01

标签: php html dompdf

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

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

有没有办法做到这一点?或者至少将代码修改为page_num + 1,page_count-1,然后将标题页面翻转以使其不显示?

$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));

3 个答案:

答案 0 :(得分:0)

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

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

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

page_script()

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

$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));
  }
');

答案 1 :(得分: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));
 }

');

答案 2 :(得分:0)

这与accepted answer相同,但是借助于带有静态函数的类,因此我们不必在字符串内部进行编码。

班级

<?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);'
);