如何在 laravel 中使用 mpdf 为每个页面添加水印

How to add watermark to every page using mpdf in laravel

我在 laravel 中使用 niklasravnsborg/laravel-pdf 包来生成 pdf。在此代码中,我添加了水印,但该水印仅出现在最后一页,但我希望它出现在每一页中。

$pdf = PDFm::loadHtml($result->document);
$pdf->mpdf->SetWatermarkText('DRAFT');
$pdf->mpdf->showWatermarkText = true;
return $pdf->download('hdtuto.pdf');

根据文档,它应该可以工作。但是,您可以尝试以下操作吗?

$config = ['instanceConfigurator' => function($mpdf) {
    $mpdf->SetWatermarkText('DRAFT');
    $mpdf->showWatermarkText = true;
}]

PDF::loadHtml($result->document, $config)->download('hdtuto.pdf');

在这种情况下,我们使用正确的配置实例初始化 PDF 实例,而不是在加载 HTML 之后进行初始化。

mPDF doc 指出

The watermark will be added to each page when the Footer is printed if the variable $showWatermark is set to 1 or true.

尝试将 header/footer 添加到您的 PDF 并设置相应的标志

如果有人试图使用 blade 文件而不是直接 html 文档,您可以使用视图函数,它将 return html 内容添加到 loadHtml 方法。

$config = ['instanceConfigurator' => function($mpdf) {
    $mpdf->SetWatermarkText('DRAFT');
    $mpdf->showWatermarkText = true;
}]

$pdf = PDF::loadHtml(view('path.to.blade_file', $blade_data), $config);

return $pdf->stream('DocumentName.pdf');

如果您想使用图片作为水印

$config = ['instanceConfigurator' => function ($mpdf) {
                $mpdf->SetWatermarkImage(asset('path/to/image_file'));
                $mpdf->showWatermarkImage = true;
                // $mpdf->watermarkImageAlpha = 0.2; // image opacity 
                // dd($mpdf) // show all attributes 
            }];

            $pdf = PDF::loadHtml(view('path.to.blade_file', $blade_data), $config);

            return $pdf->stream('DocumentName.pdf');