尝试从命名空间 "Mpdf" 加载 class "Mpdf"
Attempted to load class "Mpdf" from namespace "Mpdf"
我正在使用 PHPSpreadsheet 创建 Excel。
我想生成 Excel 文件,然后将 Excel 文件转换为 PDF 文件。
所以我做了以下事情:
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf;
use PhpOffice\PhpSpreadsheet\Reader\Exception;
class DevisGenerator
{
public function runDevis()
{
$spreadsheet = $this->loadexcelTemplate();
$uuid = $this->uniqidReal();
$filename = $this->writeName($spreadsheet, $uuid);
$this->convertPdf($spreadsheet, $filename);
}
public function writeName($spreadsheet, $uuid)
{
$worksheet = $spreadsheet->getActiveSheet();
$worksheet->getCell('B2')->setValue('Toto');
try {
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$filename = $uuid;
$writer->save($filename.'.xlsx');
}catch (Exception $e)
{
//TODO gestion erreur
}
return $filename;
}
public function convertPdf($spreadsheet, $filename)
{
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
$writer->save($filename.'.pdf');
}
但是当我 运行 代码出现以下错误时:
Attempted to load class "Mpdf" from namespace "Mpdf".
Did you forget a "use" statement for "PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf"?
我不明白这个错误,我已经在我的代码中正确插入了 use 语句。
有什么想法吗?
在 class 之前的 use 语句之后,您应该只使用:
public function convertPdf($spreadsheet, $filename)
{
$writer = new Mpdf($spreadsheet);
$writer->save($filename.'.pdf');
}
由于您在创建实例时使用了完全限定的命名空间,因此未考虑使用语句(因此出现错误消息)。
您似乎在创建 Mpdf
实例时在命名空间的开头添加了补充斜杠,删除它会解决您的问题。
$writer = new PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
但是既然你添加了use
语句,你就不需要再使用全限定命名空间了,你可以做
$writer = new Mpdf($spreadsheet);
我已经遇到了与 Mpdf 类似的问题。
PHPSpreadsheet 支持 multiple Librairies to generate PDF。
我很讨厌使用 Mpdf,但使用 Tcpdf。
我也不确定,但你需要手动安装它们。
composer require tecnickcom/tcpdf
然后在你的代码中:
$writer = new Tcpdf($spreadsheet);
并且不要忘记 use 语句 ;)
希望对您有所帮助!
我正在使用 PHPSpreadsheet 创建 Excel。 我想生成 Excel 文件,然后将 Excel 文件转换为 PDF 文件。 所以我做了以下事情:
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf;
use PhpOffice\PhpSpreadsheet\Reader\Exception;
class DevisGenerator
{
public function runDevis()
{
$spreadsheet = $this->loadexcelTemplate();
$uuid = $this->uniqidReal();
$filename = $this->writeName($spreadsheet, $uuid);
$this->convertPdf($spreadsheet, $filename);
}
public function writeName($spreadsheet, $uuid)
{
$worksheet = $spreadsheet->getActiveSheet();
$worksheet->getCell('B2')->setValue('Toto');
try {
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$filename = $uuid;
$writer->save($filename.'.xlsx');
}catch (Exception $e)
{
//TODO gestion erreur
}
return $filename;
}
public function convertPdf($spreadsheet, $filename)
{
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
$writer->save($filename.'.pdf');
}
但是当我 运行 代码出现以下错误时:
Attempted to load class "Mpdf" from namespace "Mpdf". Did you forget a "use" statement for "PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf"?
我不明白这个错误,我已经在我的代码中正确插入了 use 语句。 有什么想法吗?
在 class 之前的 use 语句之后,您应该只使用:
public function convertPdf($spreadsheet, $filename)
{
$writer = new Mpdf($spreadsheet);
$writer->save($filename.'.pdf');
}
由于您在创建实例时使用了完全限定的命名空间,因此未考虑使用语句(因此出现错误消息)。
您似乎在创建 Mpdf
实例时在命名空间的开头添加了补充斜杠,删除它会解决您的问题。
$writer = new PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
但是既然你添加了use
语句,你就不需要再使用全限定命名空间了,你可以做
$writer = new Mpdf($spreadsheet);
我已经遇到了与 Mpdf 类似的问题。
PHPSpreadsheet 支持 multiple Librairies to generate PDF。
我很讨厌使用 Mpdf,但使用 Tcpdf。 我也不确定,但你需要手动安装它们。
composer require tecnickcom/tcpdf
然后在你的代码中:
$writer = new Tcpdf($spreadsheet);
并且不要忘记 use 语句 ;)
希望对您有所帮助!