centos使用chrome-cli、chromium或wkhtmltoimage截图时出现的中文字符乱码的解决方案

centos7环境下使用chrome-phpwkhtmltoimage截图时出现的中文乱码解决方案

最近作了一个小项目,要求使用 chrome/chromium对抓取的页面进行截图保存并上传云服务,由于是 composer依赖包管理,因此使用了 chrome-php

核心代码示例:php

// navigate
    $navigation = $page->navigate('https://www.baidu.com');
        
    // wait for the page to be loaded
    $navigation->waitForNavigation();
    
    // take a screenshot
    $screenshot = $page->screenshot([
        'format'  => 'jpeg',  // default to 'png' - possible values: 'png', 'jpeg',
        'quality' => 80       // only if format is 'jpeg' - default 100 
    ]);
    
    // save the screenshot
    $screenshot->saveToFile('/some/place/file.jpg');

结果发现截图不正确,全部中文字符乱码:html

后来提了issue,地址git

按照对方给的解决方法,并未有效解决。github

后来换了各类系统环境,包括更改中文支持,依然如故,只有在本身的mac上是正常的。chrome

因此猜测应该是字体的问题,因此尝试如下方案,最终正常显示:centos

如如下命令执行出现 permission denied的状况,使用sudo命令执行。

1.fc-list查看是否有中文字体,通常状况下是不存在的,不然也不会乱码。

2.查看是否支持ttmkfdir which ttmkfdir,若是没有的话,那么安装:yum install -y ttmkfdir

3.centos7系统的话,建立字体目录,mkdir /usr/share/fonts/chinese

4.上传本地的字体文件,例如mac里对应的任何一个ttf字体文件。

5.将字体文件复制到/usr/share/fonts/chinese下,并执行chmod -R 755 /usr/share/fonts/chinese

6.执行ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir

7.编辑/etc/fonts/fonts.conf,在以下部位添加:

图片描述

8.运行fc-cachefc-cache-64(若是有的话)

9.运行fc-list查看刚刚安装的字体是否存在。

10.再一次运行程序脚本,查看截图是否包含正常的中文字符。

相关文章
相关标签/搜索