在Phabricator中集成Dompdf生成PDF失败问题求助
问题解决步骤
1. 修正Dompdf代码中的拼写错误与逻辑
setPaper方法里的potrait是拼写错误,正确应为portrait;同时重构函数,让它返回PDF二进制内容而非直接输出,方便Phabricator控制器统一处理响应:
<?php require (__DIR__ . '/vendor/autoload.php'); use Dompdf\Dompdf; function generatePDFContent() { $html = "hello world"; $dompdf = new Dompdf(); $dompdf->loadHtml($html); $dompdf->setPaper('A4', 'portrait'); // 修正拼写错误 $dompdf->render(); // 返回PDF二进制内容,交由控制器处理输出 return $dompdf->output(); }
2. 修改Phabricator控制器逻辑
原代码调用PDF生成函数后直接返回重定向,会覆盖Dompdf的输出头,导致PDF无法正常输出。需要改为返回Phabricator标准的文件下载响应:
<?php $root = dirname(phutil_get_library_root('phabricator')); require_once $root.'/externals/dompdf/push.php'; final class PhabricatorPeopleGenerateCVController extends PhabricatorPeopleController { public function shouldRequireAdmin() { return false; } public function handleRequest(AphrontRequest $request) { // 清空输出缓冲区,避免Phabricator默认输出干扰PDF内容 ob_clean(); $pdfContent = generatePDFContent(); // 创建标准文件下载响应,设置正确的文件名与MIME类型 return id(new AphrontFileResponse()) ->setFileName('dompdf_out.pdf') ->setMimeType('application/pdf') ->setContent($pdfContent); } }
3. 依赖与路径检查
- 确认
vendor/autoload.php路径正确:如果Dompdf通过Composer安装在externals/dompdf目录下,__DIR__指向该目录,vendor子目录必须存在。 - 确保服务器已安装Dompdf必需的PHP扩展:
php-gd、php-mbstring、php-xml等,缺失扩展会导致Dompdf无法正常渲染。
内容的提问来源于stack exchange,提问作者Mohammad Aditya Noviansyah
相关产品推荐
相关产品推荐

