前两天在做pdf导出功能。使用的插件是kartik-v/yii2-mpdf。本插件使用mpdfcomposer需要kartik-v/yii2-mpdfmpdf文档地址:https://mpdf.github.io/有一个需求要求导出的pdf中需要设置指定字段为指定字体,其他信息不使用此字体。一开始我直接把mpdf的字体数据添加到我需要添加的字体文??件中//Configurethefontdirectory'fontDir'=>array_merge($fontDirs,[Yii::getAlias('@common/pdf/fonts'),]),//配置字体'fontdata'=>ArrayHelper::merge($fontData,['sun-exta'=>['R'=>'my.ttf','sip-ext'=>'sun-extb',]]),但是当我配置上面的配置时,发现pdf的所有信息都变成了Thisspecifiedfont,原来这是一个全局配置字体,然后我想我应该配置我不需要使用的字体,然后在页面上引用它,所以我配置了一个字体:'fontdata'=>ArrayHelper::merge($fontData,['my'=>['R'=>'my.ttf',],]),配置后添加如下属性style="font-family:my;"添加后测试发现我的其他信息都变成了小方块。看来这是因为我没有设置我的全局字体,所以我做了全局字体配置如下://配置字体文件目录'fontDir'=>array_merge($fontDirs,[Yii::getAlias('@common/pdf/fonts'),]),'fontdata'=>ArrayHelper::merge($fontData,[//配置全局字体'sun-exta'=>['R'=>'msyh.ttf','分机'=>'sun-extb',],//配置指定信息的字体'my'=>['R'=>'my.ttf',],]),配置完成后为发现没有效果,所以需要在生成的pdf文件中引入全局字体样式body{font-family:sun-exta;}。引入后发现成功使用kartik-v/yii2-mpdf的完整配置$pdf=newPdf(['mode'=>Pdf::MODE_UTF8,'cssFile'=>'@common/pdf/assets/score-mpdf.css',//css文件地址//mpdf配置'options'=>['debug'=>true,'autoScriptToLang'=>true,'autoLangToFont'=>true,'ignore_invalid_utf8'=>true,'baseScript'=>\Mpdf\Ucdn::SCRIPT_HAN,'tabSpaces'=>4,'fontDir'=>array_merge($fontDirs,[Yii::getAlias('@common/pdf/fonts'),//字体文件目录]),'fontdata'=>ArrayHelper::merge($fontData,['sun-exta'=>['R'=>'msyh.ttf','sip-ext'=>'sun-extb',],'我的'=>['R'=>'my.ttf',],]),]]);$content=$this->renderPartial('@common/pdf/score.php',['user'=>$model,//传递的信息]);$fileName='测试pdf.pdf';返回$pdf->output($content,$fileName,Pdf::DEST_DOWNLOAD);根据上面可以为pdf中指定的信息配置字体样式
