在开发导出 PDF 时,选择了使用mPDF
,mPDF 是一个 PHP 库,它从 UTF-8 编码的 HTML 生成 PDF 文件。
而它的使用也相对简单:
安装
使用composer
加载
composer require mpdf/mpdf
使用
<?php
require_once __DIR__ . '/vendor/autoload.php';
$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('<h1>Hello world!</h1>');
$mpdf->Output();
但是在实际使用时会遇到中文和符号乱码(变成了小方块)的问题,最开始会想到是字体的问题,但是指定了字体后,并没有解决问题。

mpdf中文和符号乱码
查看了文档后发现需要指定两个参数:
$this->pdf = new Mpdf([
'autoScriptToLang' => true,
'autoLangToFont' => true,
]);
刷新页面,发现中文此时已经可以正常显示了

mpdf中文正常,符号依旧是方块
但是当中文的标点符号靠近英文的时候,中文符号就又会变回小方块。
再添加一个配置项代码,解决符号的问题:
$this->pdf = new Mpdf([
'autoScriptToLang' => true,
'autoLangToFont' => true,
'useSubstitutions' => true,
]);

mpdf导出正常
至此,解决了中文和标点符号乱码的问题。