使用FPDI编辑PDF时出现setasign\Fpdi\FpdfTpl类未找到错误
解决FPDI报错“Class 'setasign\Fpdi\FpdfTpl' not found”
核心问题分析
报错根源是类加载顺序错误或自动加载机制未正确生效:Fpdi.php中依赖FpdfTpl类,但该类未被正确加载。结合你的PHP8.2 + FPDI2.4.1环境,给出以下针对性解决方案:
方案1:优先使用Composer自动加载(推荐)
FPDI的依赖管理和类加载设计基于Composer,手动引入文件极易出错,步骤如下:
- 确保项目根目录下的
composer.json包含正确依赖:{ "require": { "setasign/fpdi": "^2.4", "setasign/fpdf": "^1.8" } } - 执行命令安装/更新依赖:
composer install - 替换代码中的所有
include语句,只保留Composer自动加载:<?php require __DIR__ . '/vendor/autoload.php'; use setasign\Fpdi\Fpdi; $pdf = new Fpdi(); // 获取PDF总页数 $pageCount = $pdf->setSourceFile('C:/wamp/www/QRCode/fichiers_uploades/UN25042019161632012774.pdf'); // 遍历所有页面 for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) { $templateId = $pdf->importPage($pageNo); $pdf->AddPage(); $pdf->useTemplate($templateId, ['adjustPageSize' => true]); // 添加图片 $image = 'QRCodes/CodeQR1.png'; $pdf->Image($image, 110, 210); } $file_name2 = 'C:/wamp/www/QRCode/fichiers_generes/UN25042019161632012774.pdf'; $pdf->Output($file_name2, 'F'); ?>
方案2:手动引入文件(仅当无法使用Composer时)
若必须手动引入,需严格保证类加载顺序,并使用绝对路径避免路径问题:
- 调整
include顺序,优先引入自动加载器(会自动处理所有依赖类):<?php // 引入FPDF核心文件 require __DIR__ . '/FPDF/fpdf.php'; // 引入FPDI自动加载器,无需单独引入Fpdi.php或FpdfTpl.php require __DIR__ . '/fpdi/src/autoload.php'; use setasign\Fpdi\Fpdi; $pdf = new Fpdi(); // 后续逻辑同方案1 ?>
额外检查点
- 路径验证:用
__DIR__拼接绝对路径,避免相对路径导致的文件找不到问题。 - 权限检查:确保PHP进程能读取
fpdi/src目录下的所有文件。 - 缓存清理:若开启了PHP opcache,清空缓存避免旧缓存干扰类加载。
内容的提问来源于stack exchange,提问作者Zaki Teniou
相关产品推荐
相关产品推荐

