github上已经有大佬封装好laravel下注册服务容器即可使用的dompdf版本。我使用的时候遇到乱码问题,然后直接从网上直接搜了几个教程,都是直接说,安装好字体文件,即可修复乱码问题。我参考博客,安装完字体文件,字体文件已生成后,依旧乱码。后来发现是默认生成的配置文件,指向的字体库路径,覆盖了类构造方法生成的默认字体库路径。默认生成的配置文件config/dompdf.php,修改默认配置项
//默认配置项
//"font_dir" => storage_path('fonts/'),
//"font_cache" => storage_path('fonts/'),
//指向字体库生成的路径
"font_dir" => realpath(base_path())."/vendor/dompdf/dompdf/lib/fonts",
"font_cache" =>realpath(base_path())."/vendor/dompdf/dompdf/lib/fonts",
重新生成pdf,乱码已经解决。以下简单说一下操作步骤。
把字体库安装脚本以及中文字体。中文字体库直接从本地,系统字体库目录拷贝一个过来即可,拷贝是为了迁移方便。我系统盘是C盘。字体库目录在C:\Windows\Fonts。比如我使用的黑体C:\Windows\Fonts\simhei.ttf。拷贝到laravel项目根目录,执行生成字体库以及配置命令
//生成黑体配置
php load_font.php simhei simhei.ttf
编写测试用例,这里生成了三个pdf文件,分别是不使用中文字体,以及使用黑体以及之前装好的宋体
public function font($font){
$dom=PDF::loadHTML("<h1 style='font-family: $font'>你好,世界</h1>");
$dom->save($font.'.pdf');
}
//测试用例
public function testPdf(){
$this->font('');
$this->font('simsun');
$this->font('simhei');
}
这里,对比一下三个生成的pdf文件体积
能看到,使用了字体库,和没使用字体库的文件体积差了几千倍。所以发现中文乱码的时候可以先观察一下,pdf文件体积,确认有没有使用字体库。