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

Yii框架中使用MYExportMenu导出PDF遇count()错误求助

Yii框架中MYExportMenu导出PDF报错count()参数问题解决

问题场景

我正尝试在Yii框架中使用MYExportMenu组件导出PDF文件,当前配置如下:

//...other MYExportMenu configuration
MYExportMenu::FORMAT_PDF => [
                            'pdfConfig' => [
                                'methods' => [
                                    'SetHeader' => $pdfHeader,
                                ]
                            ]
                        ],

点击导出按钮后,弹出下载弹窗随即报错:

count(): Parameter must be an array or an object that implements Countable

in C:\wamp64\www\myproject\vendor\mpdf\mpdf\classes\ttfontsuni.php

相关代码片段:

if (!$psName)
                throw new MpdfException("Could not find PostScript font name: " . $this->filename);
            // CHECK IF psName valid (PadaukBook contains illegal characters in Name ID 6 i.e. Postscript Name)
            $psNameInvalid = false;
            for ($i = 0; $i < count($psName); $i++) {
                $c = $psName[$i];
                $oc = ord($c);
                if ($oc > 126 || strpos(' [](){}<>/%', $c) !== false) {
                    //throw new MpdfException("psName=".$psName." contains invalid character ".$c." ie U+".ord(c));
                    $psNameInvalid = true;
                    break;

问题原因与解决步骤

这个错误核心是mPDF处理字体PostScript名称时,$psName为字符串但代码误用count()统计长度(字符串应使用strlen()),通常由字体配置缺失或错误导致,按以下步骤排查:

  • 明确指定PDF导出字体
    默认mPDF可能无法正确识别系统字体,需在pdfConfig中补充字体配置,示例:

    MYExportMenu::FORMAT_PDF => [
        'pdfConfig' => [
            'methods' => [
                'SetHeader' => $pdfHeader,
                'SetFont' => ['dejavusans', '', 10], // 指定字体、样式、字号
            ],
            // 自定义字体配置(若使用非默认字体)
            'fontDir' => '@webroot/fonts', // 字体文件存放目录
            'fontdata' => [
                'dejavusans' => [
                    'R' => 'DejaVuSans.ttf',
                    'B' => 'DejaVuSans-Bold.ttf',
                ]
            ],
        ]
    ],
    

    确保字体文件存在,且PostScript名称无特殊字符。

  • 校验$pdfHeader格式
    SetHeader参数若为数组需符合mPDF格式要求;若为字符串,检查是否含特殊字符导致字体解析异常。示例正确配置:

    // 数组格式
    $pdfHeader = ['左侧内容', '居中标题', '右侧日期'];
    // 字符串格式
    $pdfHeader = '导出报表 | 生成时间: '.date('Y-m-d H:i:s');
    
  • 更新mPDF版本
    你使用的mPDF版本存在字符串计数bug,更新至稳定版可解决:

    composer require mpdf/mpdf:^8.0
    
  • 检查组件版本兼容性
    确保MYExportMenu与当前Yii版本、mPDF版本兼容,避免版本不匹配导致参数传递错误。

内容的提问来源于stack exchange,提问作者Abdelilah Dahdahi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:01:04