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
相关产品推荐
相关产品推荐

