You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:18:16