5

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

当内容不是英文时,问题就开始了。然后,流行的浏览器(例如 Chrome 和 Firefox)回退到 CSS 字体系列中的下一个字体,直到默认字体。但是,在我的测试中,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 脚本相同的结果)中的呈现方式:

Chrome 与 QtWebKit 中的字体回退问题

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

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

4

1 回答 1

3

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

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

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

于 2012-10-10T11:20:19.420 回答