2012-10-07 22 views
4

我有一個網站,其中一些網頁有用戶生成的內容。我使用phantomjs(基於QtWebKit)截取頁面的截圖,因此它們必須在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和阿羅拉(基於QtWebKit的瀏覽器,給出了相同的結果對我phantomjs腳本):

Font fallback problem in Chrome vs QtWebKit

我想要的是文本在Calibri中呈現,如果不適合某些字符,則會退回到Arial。

我會接受一個解決方案,告訴我如何配置QtWebKit來允許這個(我在網上找不到任何東西),或者如何改變我的HTML/CSS來「支持QtWebKit」。

+0

更多的研究:我試圖通過指定「MyCalibri」使用CSS「@ font-face {url:local('calibri')} 'unicode-range'描述符,它只能加載英文字符,但我找不到任何QtWebKit允許的語法。 –

+0

我安裝了Arora,我沒有看到你的演示中的問題。你能否提供一個活頁面或更好的演示? –

+0

A.M.K - 您使用的是Windows 7 /您是否安裝了Calibri字體? –

回答

3

如果問題是所選的字體不包含指定的字符,我會建議您將字體嵌入到您的網站。有了這個,你可以確保每個平臺都能夠呈現你的內容。

你說Chrome瀏覽器沒有你描述的不正確的行爲。所以這個原因必須在你舊的WebKit實現中。您可以嘗試更新到使用WebKit 2.0的Qt 5,例如Google Chrome。 Qt 4.x使用舊的WebKit 1.x版本。

錯誤修復WebKit代碼是壞主意。代碼庫大約200萬LOC,你需要一個64位工具鏈來編譯QtWebKit模塊。如果您沒有完全按照說明操作,也很可能會出現編譯器錯誤。由於GIF圖像渲染器中的錯誤,我有自己的需要調試WebKit代碼。這是真實地獄;)

+0

感謝您的回答。字體*嵌入在我的網站中 - 問題是QtWebKit瀏覽器(phantomjs)不會回退到(例如)泰文字符上的CSS字體堆棧中的下一個字體。 關於從Qt 4升級到Qt 5 - 因爲我只是使用phantomjs(其中兩個版本之前決定將Qt代碼庫導入到phantomjs項目中),問題從「調試QtWebKit」變爲「調試幻像」 (因爲升級到Qt 5是Phantomjs團隊廣泛要求的功能,我不特別想承擔這個可能不重要的任務)。 –

相關問題