5

一部のページにユーザー生成コンテンツが含まれる Web サイトがあります。私は 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 (私の phantomjs スクリプトと同じ結果が得られる QtWebKit ベースのブラウザー) でレンダリングする方法は次のとおりです。

Chrome と QtWebKit のフォント フォールバックの問題

私が望んでいるのは、テキストを Calibri でレンダリングし、一部の文字に適さない場合は Arial にフォールバックすることです。

これを許可するように QtWebKit を構成する方法 (Web 上で何も見つかりませんでした)、または HTML/CSS を「QtWebKit をサポートする」ように変更する方法を教えてくれるソリューションのいずれかを受け入れます。

4

1 に答える 1

3

選択したフォントに指定された文字が含まれていないことが問題である場合は、そのフォントを Web サイトに埋め込むことをお勧めします。これにより、すべてのプラットフォームでコンテンツをレンダリングできるようになります。

あなたは、Chrome には、あなたが誤って説明した動作がないと言っています。したがって、原因は古い WebKit 実装にあるはずです。Google Chrome などの WebKit 2.0 を使用する Qt 5 にアップデートしてみてください。Qt 4.x は古い WebKit 1.x バージョンを使用します。

WebKit コードのバグ修正は非常に悪い考えです。コードベースは約 200 万の LOC で、QtWebKit モジュールをコンパイルするには 64 ビット ツールチェーンが必要です。また、指示に正確に従わないと、コンパイラ エラーが発生する可能性が非常に高くなります。GIF 画像レンダラーのバグのため、WebKit コードをデバッグする必要がありました。これは地球上の本当の地獄です;)

于 2012-10-10T11:20:19.420 に答える