Spatie/Browsershot (Puppeteer) 正在打印二进制数据而不是 base64 (PDF)

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

我在 Laravel 中使用 Spatie/Browsershot 生成 Base64 格式的 PDF。在我的本地计算机(Windows)中,它可以正常工作。但是,在我的 Ubuntu 服务器 (AWS) 中却没有。它只是打印出一些我认为是原始二进制数据的数字。

我用于本地主机的代码:

$base64Data = Browsershot::html(view('receipt-pdf', ['data' => $receipt, 'pmData' => $pmData])->render())
                ->setNodeBinary("C:\\Program Files\\nodejs\\node")
                ->setNpmBinary("C:\\Program Files\\nodejs\\npm")
                ->setChromePath('C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe')
                ->format('A4')
                ->base64pdf();

输出示例:

JVBERi0xLjQKJdPr6eEKMSAwIG9iago8PC9UaXRsZSAoQXFhcmkgLSA3KQovQ3JlYXRvciAoTW96aWxsYS81LjAgXChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjRcKSBBcHBsZVdlYkt...

对于我的 Ubuntu 服务器:

$base64Data = Browsershot::html(view('receipt-pdf', ['data' => $receipt, 'pmData' => $pmData])->render())
                ->setChromePath('/usr/bin/google-chrome-stable')
                ->format('A4')
                ->base64pdf();

输出示例:

37,80,68,70,45,49,46,52,10,37,211,235,233,225,10,49,32,48,32,111,98,106,10,60,60,47,84,105,116,108,......

我已检查以下内容:

  • 有关 Chrome 执行的权限。
  • 使用 Chromium 代替 Chrome。
  • 重新安装 Chrome。
  • 使用 ->pdf() 而不是 ->base64pdf() 生成,然后使用 base64_encode()。

这些都不起作用。

php laravel pdf puppeteer browsershot
1个回答
0
投票

经过大量调查后: browsershot安装最新的puppeteer版本,它会导致puppeeter和browsershot之间的通信不良,因为它不返回base64格式 看: https://github.com/spatie/browsershot/commit/a270f121c844c246ce8944d17c1d2d4c9432ef01

解决方案是 PHP >= 8.2 && 将您的作曲家更新为“spatie/browsershot”:“^4.3.0”

© www.soinside.com 2019 - 2024. All rights reserved.