Yii2中使用kartik\mpdf\Pdf实现PDF密码保护的问题求助
解决kartik\mpdf\Pdf调用setProtection报错的问题
你遇到的问题是因为kartik\mpdf\Pdf是一个封装类,setProtection是底层mPDF核心类的方法,不能直接通过封装类实例调用。你需要先获取到底层的mPDF实例,再调用这个方法。
另外先提一下你代码里的两个小语法错误,得先修正:
$file_name = "test" . rand(7, 100).pdf";这里少了一个双引号,应该是"test" . rand(7, 100) . ".pdf";$password = "122":这里用了冒号,应该改成分号$password = "122";
接下来是正确的实现代码:
$pdf = new Pdf([ 'mode' => Pdf::MODE_CORE, 'format' => Pdf::FORMAT_A4, 'orientation' => Pdf::ORIENT_PORTRAIT, 'destination' => Pdf::DEST_FILE, 'content' => $html, 'cssFile' => '@api/web/css/notes.css', 'options' => ['title' => $note['title']], 'methods' => [ 'SetHeader' => [''], 'SetFooter' => [''], ], ]); // 修正语法错误 $file_name = "test" . rand(7, 100) . ".pdf"; $password = "122"; // 获取底层的mPDF实例,再调用setProtection $mpdfInstance = $pdf->getApi(); $mpdfInstance->setProtection(array(), $password); $pdf->filename = "uploads/" . $file_name; echo $pdf->render();
关键说明:
kartik\mpdf\Pdf提供了getApi()方法,用来返回内部初始化的mPDF核心实例,所有mPDF原生方法(比如setProtection)都要通过这个实例调用。- 你之前直接调用
$pdf->setProtection()会报错,因为封装类本身没有定义这个方法;而$pdf->filename->setProtection()更是错误,因为filename是字符串属性,不是对象。
内容的提问来源于stack exchange,提问作者php guy
相关产品推荐
相关产品推荐

