使用setasign/fpdf与fpdi给PDF加密时遇Fpdi类未找到错误
解决Fpdi类未找到的问题
1. 确认Composer自动加载已正确引入
检查脚本开头是否引入了Composer的自动加载文件,这是类能被正确加载的基础:
require __DIR__ . '/vendor/autoload.php';
如果项目结构不同,自行调整路径,比如../vendor/autoload.php。
2. 正确使用命名空间
当前setasign的FPDI系列包采用命名空间机制,不能直接全局调用Fpdi类,需先引入对应命名空间:
use setasign\Fpdi\Fpdi; use setasign\FpdiProtection\FpdiProtection;
3. 初始化加密专用类
要实现PDF密码保护,需使用FpdiProtection类而非单纯的Fpdi,示例代码如下:
// 引入自动加载 require __DIR__ . '/vendor/autoload.php'; use setasign\FpdiProtection\FpdiProtection; // 初始化加密实例 $pdf = new FpdiProtection(); // 导入上传的PDF文件(以单页为例,多页可循环处理) $pageCount = $pdf->setSourceFile('上传的文件路径.pdf'); $tplId = $pdf->importPage(1); $pdf->AddPage(); $pdf->useTemplate($tplId); // 设置保护规则:权限数组、用户密码、所有者密码 $pdf->SetProtection( ['print'], // 允许的操作,比如禁止copy就去掉'copy' 'user_pass123', 'owner_pass456' ); // 输出加密后的PDF $pdf->Output('protected.pdf', 'D');
4. 检查依赖版本兼容性
确保composer.json中的依赖版本相互兼容,示例配置:
{ "require": { "setasign/fpdf": "^1.8", "setasign/fpdi": "^2.3", "setasign/fpdi-protection": "^2.3" } }
执行composer update确保所有依赖正确安装,版本不匹配可能导致类加载异常。
5. 禁用手动文件引入
不要手动引入FPDI或FPDF的单个文件,Composer自动加载已处理类加载逻辑,手动引入会引发命名空间冲突或重复加载问题。
内容的提问来源于stack exchange,提问作者Cody Matthew
相关产品推荐
相关产品推荐

