使用Laravel-Dompdf生成PDF时图片无法显示:文件未找到或类型未知问题
嘿,我之前也碰到过DomPDF处理图片的类似坑,这家伙对路径的要求确实有点严格,咱们一步步来解决:
优先用服务器绝对文件路径,别用HTTP URL
DomPDF默认没法直接解析localhost这类HTTP地址(除非你特意开启远程访问,但本地图片完全没必要),它更认服务器上的物理文件路径。你可以用Laravel的public_path()辅助函数来生成正确的路径,把视图里的图片标签改成:<img src="{{ public_path('images/pages/page-1.jpg') }}">这里
public_path()会直接指向你项目的public目录,后面的路径对应好你图片的实际位置就行。检查DomPDF的配置项
如果你非要用URL的方式,得先发布DomPDF的配置文件:php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"然后打开
config/dompdf.php,把isRemoteEnabled设置为true,同时确认chroot配置指向你的项目根目录或者public目录,避免路径解析出错。不过还是建议用文件路径,更稳定。确认文件权限
虽然正常视图能显示图片,但生成PDF时,服务器的运行用户(比如www-data)可能没有读取图片文件的权限。可以给图片所在目录设置合适的权限:chmod -R 755 public/images/pages或者确保文件的所有者和服务器运行用户一致。
内嵌图片(终极备选方案)
如果上面的方法都不行,你可以把图片转成Base64编码内嵌到HTML里,这样DomPDF肯定能识别。比如在控制器里处理:// 读取图片并转成Base64编码 $imageData = base64_encode(file_get_contents(public_path('images/pages/page-1.jpg'))); $imageSrc = 'data:image/jpeg;base64,' . $imageData;然后把
$imageSrc传到视图里,用这个变量作为图片的src:<img src="{{ $imageSrc }}">
一般来说,用public_path()生成绝对文件路径就能解决大部分本地图片不显示的问题,你可以先试试这个方法~
备注:内容来源于stack exchange,提问作者sadasdadssad

