【问题标题】:How i use dompdf with laravel without a wrapper我如何在没有包装器的情况下将 dompdf 与 laravel 一起使用
【发布时间】:2025-12-25 09:10:06
【问题描述】:

我正在尝试使用没有 barryvdh 包装器的 dompdf,因为我的项目中安装了 laravel 收银员并收到消息:

 - Root composer.json requires barryvdh/laravel-dompdf ^0.9.0 -> satisfiable by barryvdh/laravel-dompdf[v0.9.0].
    - Conclusion: don't install dompdf/dompdf v0.8.4 (conflict analysis result)
    - Conclusion: don't install dompdf/dompdf v1.0.2 (conflict analysis result)
    - Conclusion: don't install dompdf/dompdf v0.8.5 (conflict analysis result)
    - Conclusion: don't install dompdf/dompdf v1.1.0 (conflict analysis result)
    - Conclusion: don't install dompdf/dompdf v0.8.6 (conflict analysis result)
    - Conclusion: don't install dompdf/dompdf v1.1.1 (conflict analysis result)
    - laravel/cashier is locked to version v10.7.1 and an update of this package was not requested.
    - laravel/cashier v10.7.1 requires dompdf/dompdf ^0.8.0 -> satisfiable by dompdf/dompdf[v0.8.0, ..., v0.8.6].
    - You can only install one version of a package, so only one of these can be installed: dompdf/dompdf[v0.8.0, ..., v0.8.6, v1.0.0, ..., v1.1.1].
    - barryvdh/laravel-dompdf v0.9.0 requires dompdf/dompdf ^1 -> satisfiable by dompdf/dompdf[v1.0.0, ..., v1.1.1].
    - Conclusion: don't install dompdf/dompdf v1.0.1 (conflict analysis result)

每当我尝试安装软件包时。所以我使用收银员附带的 0.8.6 版本来生成我的 pdf。我做了一个简单的测试:

Route::get('manual-test-pdf', function () {
  $dompdf = new Dompdf();
  $html = view('pdf.test')->render();
  $dompdf->loadHtml($html);

  return $dompdf->stream();
});

尝试渲染视图:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Pdf test</title>
</head>

<body>
  <h1>Test one</h1>
</body>

</html>

但结果始终是空白页。 -&gt;render()-&gt;stream() 给出了相同的结果。我认为我做错了什么,但我没有在网上找到任何关于使用纯 dompdf 返回/渲染 pdf 的正确方法,因为每个人都使用 barryvdh 的版本。

谁能告诉我这个?

【问题讨论】:

  • 似乎您有一个依赖项已经在使用它的较低版本,可能是composer update

标签: php laravel dompdf laravel-cashier


【解决方案1】:

截至本文发布时,laravel/cashier 的最新稳定版本是 v13.7.0,它需要:
"dompdf/dompdf": "^0.8.6|^1.0.1"
"php": "^7.3|^8.0"

barryvdh/laravel-dompdf 的最新稳定版本是v0.9.0,它需要: "dompdf/dompdf": "^1"
"php": "^7.1 || ^8.0"

对于最近的 PHP 版本,这些包看起来很像彼此兼容。

您的 composer.json 文件已指定:
"barryvdh/laravel-dompdf": "^0.9.0"
但是您的 composer.lock 文件将 laravel/cashier 锁定到 v10.7.1 版本。 所以基本上你只需要将你的 cachier 版本从 v10.7.1 更新到更新的版本,例如截至本文发布时的最新版本:v13.7.0(你可以在 composer.json 文件中指定)

您应该可以通过一个简单的:
composer update

您也可以尝试删除您的 composer.lock 文件,以免您被锁定到特定版本,然后使用 composer installcomposer update 重新尝试安装/更新。
如果您在删除 composer.lock 文件后需要保留任何特定版本的内容,例如如果它破坏了代码,请在您的 composer.json 文件中指定它们。

编辑:

这听起来很像您已经安装了 laravel-dompdf 版本 0.8.6,以及 laravel/cashier 版本 v10.7.1 和 laravel 5,但是您现在被束缚并且无法升级东西。所以不幸的是,你无法获取 laravel-dompdf 0.9.0 版。但我认为这并不重要,因为您使用的是较旧的 laravel 安装。

我认为您只是在为如何使用已经安装的 laravel-dompdf 0.8.6 版而苦苦挣扎:
https://github.com/barryvdh/laravel-dompdf/tree/v0.8.6

您需要确保将服务提供者添加到您的 laravel 项目的 config/app.php 文件中:
Barryvdh\DomPDF\ServiceProvider::class,

向下滚动到文件中的'providers' =&gt; [ 部分,如果缺少该部分,请将服务提供者行添加到您正在使用的其他服务提供者旁边。

服务提供者提供dompdf类。
但是您需要确保使用 laravel 构建它,以便它有机会处理创建,以便它可以调用服务提供者。

我看到你正在尝试运行:

Route::get('manual-test-pdf', function () {
  $dompdf = new Dompdf();
  $html = view('pdf.test')->render();
  $dompdf->loadHtml($html);

  return $dompdf->stream();
});

这不会通过服务提供商....

根据自述文件,您需要运行以下内容:

$pdf = \App::make('dompdf.wrapper');

你也可以试试:

$pdf = app('dompdf.wrapper');

这将处理创建方面,我相信你可以从那里弄清楚。

在尝试使某些东西正常工作方面,您可以尝试使用以下方法进行测试:

Route::get('manual-test-pdf', function () {
    $pdf = \App::make('dompdf.wrapper');
    $pdf->loadHTML('<h1>Test</h1>');
    return $pdf->stream();
});

【讨论】:

  • 很抱歉没有指定,laravel收银版本10。因为项目使用laravel 5,所以较新的版本是10版本,使用dompdf v0.8.6。我目前无法更新整个项目,所以我需要一个临时解决方案来处理 pdf。
  • @VitorRayan 我更新了我的答案。确保您以 laravel 方式构建类,以便包的服务提供者有机会运行。
最近更新 更多