如何修复/解决QtWebKit不正确的字体回退行为?

Yon*_*ein 5 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>
Run Code Online (Sandbox Code Playgroud)

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

Chrome与QtWebKit中的字体后备问题

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

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

Ale*_*ian 3

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

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

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