2017-03-08 192 views
0

我想渲染一个网站以便用FFmpeg创建视频。PhantomJS无法渲染字体

这是迄今为止的代码和phantomjs命令。

它实际上很多网站工作正常,但我想呈现一个内联网网站,我收到如下输出。

什么可能是这个不正确的渲染的原因还是我错过了什么?

谢谢。

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

// EDIT 2:同样的问题https://developers.google.com/fonts/

//phantomjs capture.js http://www.stackoverflow.com C:/Users/Admin/Desktop/record/ 25 

var args = require('system').args; 
var url = args[1]; 
var path = args[2]; 
var frames = args[3]; 
var page = require('webpage').create(); 

page.viewportSize = { width: 640, height: 480 }; 

page.open(url, function() { 
    setTimeout(function() { 

    var frame = 0; 

    setInterval(function() { 
     // Render an image with the frame name 
     page.render(path+(frame++)+'.png', { format: "png" }); 

     if(frame > 25) { 
     phantom.exit(); 
     } 
    }, frames); 
    }, 666); 
}); 

Output

enter image description here

回答

1

解决方案:

  • 与渲染问题或者幻灯片中的渲染函数的常见问题是在phantomjs 2.5.0 beta中部分修复

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

    1. 创建文件夹:/usr/share/fonts/TTF
    2. 把所有TTF文件在那里并运行fc-cache -f -v
+0

或者在任何目录下运行'fc-cache -f -v/fonts_dir /' –

0

关于日本,中国,印地文或其他特殊字符,我是有phantomjs问题并为这些特殊字符渲染字体,这就是我解决问题的方法:

  1. 下载相应的.ttfUnicode fonts文件。网上有几个免费的网站,但是你有几个Unicode字体免费文件几个不同的字符映射here

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

  3. 运行要么fc-cache -fv /etc/fontsfc-cache -fv ~/.fonts/相应。这fc-cache命令扫描系统的字体目录,并建立字体信息缓存文件

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

经过长时间的搜索,它为我工作。