PhantomJS:中文字符在生产服务器上显示为块

时间:2015-10-08 10:59:17

标签: linux fonts phantomjs

我们使用PhantomJS从网页创建屏幕截图。此页面显示可以使用任何语言的文本:拉丁语,俄语,中文,阿拉伯语等。在我的本地Ubuntu桌面上,这一切都有效,在生产服务器上显示中文字符块。服务器是AWS Linux,类似于Centos。

使用的字体是Dejavu Sans:

* { font-family: "DejaVu Sans"; }

DejaVu安装在服务器上:

ls -1 /usr/share/fonts/dejavu/
DejaVuSans-BoldOblique.ttf
DejaVuSans-Bold.ttf
DejaVuSansCondensed-BoldOblique.ttf
DejaVuSansCondensed-Bold.ttf
DejaVuSansCondensed-Oblique.ttf
DejaVuSansCondensed.ttf
DejaVuSans-ExtraLight.ttf
DejaVuSans-Oblique.ttf
DejaVuSans.ttf
DejaVuSerif-BoldItalic.ttf
DejaVuSerif-Bold.ttf
DejaVuSerifCondensed-BoldItalic.ttf
DejaVuSerifCondensed-Bold.ttf
DejaVuSerifCondensed-Italic.ttf
DejaVuSerifCondensed.ttf
DejaVuSerif-Italic.ttf
DejaVuSerif.ttf

这是字体问题吗?

如何让PhantomJS显示所有字符?

1 个答案:

答案 0 :(得分:0)

DejaVu没有中国人的支持。事实上,市场上几乎没有支持unicode的字体支持,而那些获得完全unicode支持的字体优先覆盖质量(即它们看起来很糟糕)。

当请求的字体有覆盖漏洞时,Linux文本堆栈非常智能,可以替换其他字体,但这取决于所安装的字体。您的桌面安装了一个完整的i18n字体集(面向GUI),您的服务器是一个最小的设置(无头向导)。要实现您想要的功能,您需要在服务器上安装更多字体。

你不能复制你的桌面字体选择,像Ubuntu这样的Debian衍生品中的字体可用性和像AWS这样的Fedora衍生品会略有不同。

要检查Fedora衍生产品上特定区域设置的覆盖范围可用的字体包,您可以键入use

sudo dnf install 'font(:lang=zu)' (zulu coverage)

或类似的东西(如果您的系统较旧,则用yum替换dnf)。如果你想超越sudo dnf install' * - fonts'。如果你想了解什么字体被替换以及何时阅读fontconfig文档(man fc-list& friends)