如何循环生成多个MPDF文件且不丢失配置?解决阿拉伯字符拆分问题
解决MPDF循环生成文件时阿拉伯字符拆分问题
每次循环重新实例化MPDF对象,避免复用实例导致的状态累积问题。MPDF的配置、字体缓存和排版状态会在实例中保留,复用实例容易引发RTL文本排版异常,尤其是插入图片后。示例代码:
foreach ($documents as $doc) { // 每次循环新建MPDF实例,传入完整配置 $mpdf = new \Mpdf\Mpdf([ 'mode' => 'utf-8', 'format' => 'A4', 'default_font' => 'Amiri', // 使用支持阿拉伯文的字体 'autoScriptToLang' => true, 'autoLangToFont' => true, 'directionality' => 'rtl' ]); // 确保阿拉伯文本包裹在RTL容器内 $mpdf->WriteHTML('<div dir="rtl">' . $doc['content'] . '</div>'); // 用块级元素包裹图片,避免打乱文本流 $mpdf->WriteHTML('<div style="margin: 1em 0; text-align: center;"><img src="' . $doc['image_path'] . '" style="max-width: 100%;" /></div>'); // 生成文件 $mpdf->Output($doc['filename'], 'F'); // 销毁实例释放资源 unset($mpdf); }为每个循环实例设置独立的字体缓存目录,防止缓存冲突导致的字体加载异常:
'fontCache' => sys_get_temp_dir() . '/mpdf_cache_' . uniqid(),确认使用的字体完全支持阿拉伯文连笔特性,比如Amiri、Scheherazade等,避免因字体缺失连笔数据导致字符拆分。
内容的提问来源于stack exchange,提问作者Ahmed Mohamed
相关产品推荐
相关产品推荐

