mPDF QR 代码无法使用 mpdf/qrcode 库以 PDF 形式显示

问题描述 投票:0回答:1

我使用 mPDF 以及 mpdf/qrcode 库来生成 QR 码并将其嵌入 PDF 文档中。这些 PDF 是使用 PHPSpreadsheet 从 XLS 文件中提取的数据生成的。读取 XLS 文件和生成 PDF 的整个过程均正常运行,但显示 QR 码除外。尽管生成了看似有效的 QR 码图像,但它不会显示在最终的 PDF 中。生成的 PDF 没有 mPDF 报告的错误,但 QR 码所在的区域显示为空白。

我尝试了两种主要方法将二维码图像插入PDF:

  1. 直接 Base64 编码:我使用 mpdf/qrcode 将 QR 码图像生成为 PNG,然后将其编码为 Base64 并在 mPDF->Image() 函数内使用 URI data:image/png;base64,.... .
use Mpdf\QrCode\QrCode;
use Mpdf\Output;

$qrCode = new QrCode($pdfUrl);
$output = new Output\Png();
$qrCodeImage = $output->output($qrCode, 300);
$mpdf->Image('data:image/png;base64,' . base64_encode($qrCodeImage), 10, 10, 40, 40);
  1. 使用临时文件:我使用 tempnam() 和 file_put_contents() 将生成的二维码图像保存到临时文件中,然后使用 mPDF->Image() 的文件路径。生成 PDF 后,我删除临时文件。
use Mpdf\QrCode\QrCode;
use Mpdf\Output;

$qrCode = new QrCode($pdfUrl);
$output = new Output\Png();
$qrCodeImage = $output->output($qrCode, 300);

$tempFile = tempnam(sys_get_temp_dir(), 'qr');
file_put_contents($tempFile, $qrCodeImage);
$mpdf->Image($tempFile, 10, 10, 40, 40);
unlink($tempFile);

在这两种情况下,PDF 都会正确生成,但 QR 码不会出现。我已验证 $pdfUrl 变量包含正确的 URL。我正在使用 mPDF 版本 8.2.1、mpdf/qrcode 版本 1.2 和 PHPSpreadsheet 版本 3.7,在 PHP 8.3.14 上运行。使用 PHPSpreadsheet 从 XLS 文件中正确提取用于生成 PDF 的数据,并且生成其余 PDF 内容没有问题。

我也尝试过调整mPDF->Image()中的位置和大小参数,但这并没有解决问题。 GD 和 mbstring 扩展已启用

php pdf-generation qr-code mpdf
1个回答
0
投票

我认为Olivier的想法是可行的,我们可以使用

Output\Mpdf
将QR码直接写入PDF文档,避免任何PNG生成或base64编码:

use Mpdf\QrCode\QrCode;
use Mpdf\QrCode\Output\Mpdf as QrOutput;

// Make sure $pdfUrl is URL-encoded if it contains special characters
$qrCode = new QrCode($pdfUrl);
$output = new QrOutput();

// Parameters: QR code, mPDF instance, x position, y position, width (in mm)
$output->output($qrCode, $mpdf, 10, 10, 40);
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.