我在 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,......
我已检查以下内容:
这些都不起作用。
经过大量调查后: browsershot安装最新的puppeteer版本,它会导致puppeeter和browsershot之间的通信不良,因为它不返回base64格式 看: https://github.com/spatie/browsershot/commit/a270f121c844c246ce8944d17c1d2d4c9432ef01
解决方案是 PHP >= 8.2 && 将您的作曲家更新为“spatie/browsershot”:“^4.3.0”