首页 > 解决方案 > 尝试使用所有形式的实例化来实现 FPDF,但只有一种形式有效。别人给错误

问题描述

按照说明安装了crabley/fpdf-laravel。尝试了一些示例代码,如下所示:

$pdf= app('FPDF');
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Swordsmen Class Times');
$pdf->Output();

虽然 fpdf 的实例化与教程中的示例不同,但一切都按预期工作,并且 pdf 显示在浏览器中。我从“用法”下的crabbley packagist.org/packages/crabbly/fpdf-laravel 自述文件中获得了这个工作示例。“用法”说明还提供了另一种实例化方式,即:$pdf = new Crabbly\FPDF\FPDF; 教程示例再次使用稍微不同的东西,即

require('fpdf.php');
x=new FPDF();

因此有点不同。当我将其更改为与教程相同时,我更改的只是实例化行

$pdf= app('FPDF');

$pdf = new FPDF('L', 'mm','A4');

我收到错误“找不到类'App\Http\Controllers\FPDF'”。我不明白不同形式的实例化之间的区别,也不知道发生了什么,但我需要后一种格式,所以我可以设置页面方向等。我还尝试了上述使用格式,但出现了同样的错误,即未找到新的 Crabbly\FPDF\FPDF。我已经尝试过 require 语句,但没有找到 FPDF,我不确定将“require”指向哪里。

安装包括: composer require crawlbly/fpdf-laravel add Crabbly\FPDF\FpdfServiceProvider::class to config/app.php in the providers section

任何建议将不胜感激。

标签: laravelfpdf

解决方案


您正在使用 Laravel 框架的实现,它将 FPDF 的实例绑定到服务容器。Usingapp('FPDF')会返回一个新的 FPDF 实例,这与执行的操作几乎相同new FPDF()

使用它的require方式与框架无关,如果您只是使用普通的 PHP 脚本,这将是使用 FPDF 的方式。虽然你也可以在 Laravel 中使用这种方式,但你为什么要这样做呢?

require顺便说一句,不起作用的原因是在您调用它的位置找不到 fpdf.php 文件。除非您给它一个路径,否则它将被要求位于同一目录中。考虑到您是使用 composer 安装的,fpdf.php 脚本(如果有的话)应该位于 vendor 目录中。

但是,只需使用服务容器即可。该行$pdf = new FPDF('L', 'mm','A4');只是创建 FPDF 类的一个新实例,并通过将参数传递给构造函数来初始化它,这些参数是横向方向的“L”、测量单位的“mm”和页面大小的“A4”。在不知道您使用的包并对其进行测试的情况下,您还应该能够通过调用来等效地设置它们:

$pdf = app('FPDF', ['L', 'mm', 'A4']);

希望有帮助!


推荐阅读