PhantomJS无法渲染字体

时间:2017-03-08 15:27:41

标签: fonts phantomjs

我想用FFmpeg渲染一个用于创建视频的网站。

这是到目前为止的代码和phantomjs命令。

它实际上适用于很多网站,但我想渲染一个内部网网站,我收到如下输出。

这种错误渲染的原因是什么?我错过了什么?

感谢。

//编辑1:我认为问题在于,phantomjs存在字体问题。使用verison 2.1.1

//编辑2:与https://developers.google.com/fonts/

相同的问题
{{1}}

Output

enter image description here

2 个答案:

答案 0 :(得分:1)

解决方案:

  • 渲染https://developers.google.com/fonts/的问题,或者更确切地说,phantomjs中渲染函数的常见问题在phantomjs 2.5.0 beta中已经部分修复

  • 带有奇怪符号的第一张图片基于缺少的字体。 Phantom在没有核心字体集的Redhat上运行。所以我安装了一些TTF。

    1. 创建文件夹:/usr/share/fonts/TTF
    2. 将所有TTF文件放入其中并运行fc-cache -f -v

答案 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"]
      })
    };
    

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