使用 {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);'
);
我有下面的代码,可以完美地将页码添加到文档右下角的每个页面。
我有一个不需要页码的 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
<?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);'
);