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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:31:16