问题描述
我正在尝试在 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 资源。