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

如何循环生成多个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:40:25