如何解决/解决QtWebKit错误的字体回退行为?

时间:2012-10-07 13:16:37

标签: css qt qtwebkit

我有一个网站,其中一些网页包含用户生成的内容。我使用phantomjs(基于QtWebKit)来截取页面的截图,因此它们必须在QtWebKit中完美呈现。

当内容不是英文时,问题就开始了。然后,流行的浏览器(如Chrome和Firefox)会回归到CSS font-family中的下一个字体,直到默认字体。但是,在我的测试中,QtWebKit似乎表现出不同的行为:它错误地选择了无法呈现内容的字体。

考虑这个示例文件“fonts.html”:

calibri, arial:
<div style="font-family: calibri, arial; font-size: 36px;">
ฝ่ายอีเว้นท์พร้อมแล้วกับงานปาร์ตี้ที่สนุกที่สุดในกทม
</div>

calibri:
<div style="font-family: calibri; font-size: 36px;">
ฝ่ายอีเว้นท์พร้อมแล้วกับงานปาร์ตี้ที่สนุกที่สุดในกทม
</div>

arial:
<div style="font-family: arial; font-size: 36px;">
ฝ่ายอีเว้นท์พร้อมแล้วกับงานปาร์ตี้ที่สนุกที่สุดในกทม
</div>

default:
<div style="font-size: 36px;">
ฝ่ายอีเว้นท์พร้อมแล้วกับงานปาร์ตี้ที่สนุกที่สุดในกทม
</div>

以下是它在Chrome和Arora(一种基于QtWebKit的浏览器中呈现给我的phantomjs脚本的相同结果)的呈现方式:

Font fallback problem in Chrome vs QtWebKit

我想要的是在Calibri中呈现文本,如果不适合某些角色,则回退到Arial。

我会接受一个解决方案,告诉我如何配置QtWebKit以允许这个(我在网上找不到任何东西),或者如何将我的HTML / CSS更改为“支持QtWebKit”。

1 个答案:

答案 0 :(得分:3)

如果问题是所选字体不包含指定字符,我建议您将字体嵌入到您的网站中。有了它,您可以确保每个平台都能够呈现您的内容。

你说Chrome没有你所描述的错误行为。因此原因必须在您的旧WebKit实现中。您可以尝试更新到使用WebKit 2.0的Qt 5,例如Google Chrome。 Qt 4.x使用旧的WebKit 1.x版本。

修改WebKit代码是一个 非常 坏主意。代码库大约有200万LOC,你需要一个64位工具链来编译QtWebKit模块。如果您不完全按照说明操作,也很可能会出现编译器错误。由于GIF图像渲染器中存在错误,我自己需要调试WebKit代码。这是地球上真正的地狱;)