phantomjs字体渲染问题

时间:2014-02-26 20:29:30

标签: fonts render phantomjs

使用最新版本的phantomjs v1.9.7,在我的生产服务器上渲染一些字符时出现问题。开发服务器没问题。

在渲染phantomjs.org主页时,带有“strong”标签的字体或某种粗体字体(如“700em”)会正确渲染,但正常的字体粗细不会。

我还没有注意到任何其他网址的这个问题。

此外,来自任何网址的所有中文字符(我到目前为止已检查过)都会在生产服务器上使用框进行渲染,但在开发服务器上正确显示。

我不知道问题是什么。

以下是每个服务器的http://phantomjs.org部分的屏幕截图:

生产服务器 - debian 7稳定 phantomjs.com - production server - debian 7 stable

dev服务器 - debian 8测试 phantomjs.com - dev server - debian 8 testing


以下是http://taoboa.com

的屏幕截图

制作 - debian 7稳定

taobao.com - production server -debian 7 stable

dev服务器 - debian 8测试

taobao.com - dev server - debian 8 testing

有什么想法?谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

我最终做的是将我的服务器从Debian 7更新到Ubuntu 13.10,这解决了这个问题。我真的不知道是什么软件包导致了这个问题 - 可能是fontconfig或libfreetype6 ......我不知道。

答案 1 :(得分:0)

关于日文,中文,印地文等字符,我遇到了phantomjs和这些特殊字符的字体渲染问题,这就是我解决问题的方法:

  1. 下载相应的.ttf Unicode fonts文件。网上有几个免费网站,但你有几个Unicode字体免费文件可用于几个不同的角色地图here

  2. .ttf文件保存在目录/etc/fonts或目录~/.fonts中的服务器/计算机中。后者也是一个unix目录,如果它不存在,则创建它,如果你没有root权限就需要它(例如共享服务器)

  3. 相应地运行fc-cache -fv /etc/fontsfc-cache -fv ~/.fonts/。此fc-cache命令扫描系统上的字体目录并构建字体信息缓存文件

  4. 然后在phantomjs代码中,始终使用utf-8 文件系统

    var HTMLfile = fs.open(path + file_name, {
        mode: 'r', //read
        charset: 'utf-8' 
    });
    var content = HTMLfile.read();
    HTMLfile.close();
    

    网页

    var webPage = require('webpage');
    var page = webPage.create();
    var settings = {
      operation: "POST",
      encoding: "utf8",
      headers: {
        "Content-Type": "application/json"
      },
      data: JSON.stringify({
        some: "data",
        another: ["custom", "data"]
      })
    };
    

    经过长时间的搜索,它对我有用。