无法使用工匠服务在laravel-mpdf中加载图像

问题描述

我正在尝试在 Laravel 8 中使用 Laravel Mpdf 加载 pdf 文件中的徽标图像。以下是我在 img 标签中使用的一些代码

<img style="height: auto; width: 150px;" src="/storage/images/{{ $company_details->company_logo }}" />

超时一分钟后出现以下错误

Symfony\Component\ErrorHandler\Error\FatalError
Maximum execution time of 60 seconds exceeded 

没有图像标签一切正常。 Pdf 文件加载时间为 2 到 3 秒。

如果我在使用 Laravel Mpdf 加载图像文件时遗漏了任何内容,请告诉我。谢谢。

好的,我正在向其中添加文件,以便更清楚地了解问题。

routes/web.PHP

<?PHP
use Illuminate\Support\Facades\Route;

use App\Http\Controllers\PdfController;

Route::get('/invoices/pdf',[PdfController::class,'generate_pdf']);

PdfController.PHP

<?PHP

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\CompanyDetails;
use PDF;

class PdfController extends Controller
{
    
    public function generate_pdf()
    {   
        $pdf = PDF::loadView('invoices.pdf',[
            'company_details' => CompanyDetails::orderBy('company_id','asc')->first()
            
        ],[
            'title' => 'PDF Title','author' => 'PDF Author','margin_left' => 20,'margin_right' => 20,'margin_top' => 40,'margin_bottom' => 20,'margin_header' => 10,'margin_footer' => 10,'showImageErrors' => true
        ]);

        return $pdf->stream('pdf-file.pdf');
    }
}

唯一的问题是没有图像它工作正常,但图像有超时错误

解决方法

mPDF 无法使用单线程服务器正确加载外部资源。

如文档和自述文件中所述,

mPDF 在使用 php -S 等单线程服务器获取外部 HTTP 资源时存在一些问题。推荐使用合适的服务器,例如 nginx (php-fpm) 或 Apache。

https://github.com/mpdf/mpdf#known-server-caveats

,

我遇到了同样的问题,但我修复了从绝对路径到相对路径的所有图像

例如在我的情况下我改变了

src="{{assets('assets/logo.jpg')}}"

src="assets/logo.jpg"

assets 函数会生成类似 http://youripordomain 的内容

,

我已经通过更改下面的行来解决它

<img style="height: auto; width: 150px;" src="/storage/images/{{ $company_details->company_logo }}" />

<img style="height: auto; width: 150px;" src="storage/images/{{ $company_details->company_logo }}" />

斜线(/)是问题所在。我认为它正在将其视为 HTTP 资源。