cht電腦資訊字型
adm Find login register

Evince 開 PDF 檔出現框框的問題

coolcd
joined: 2008-01-21
posted: 2601
promoted: 348
bookmarked: 95
1subject: Evince 開 PDF 檔出現框框的問題Promote 0 Bookmark 02011-02-05quote  

在友站看到一個中文字型問題

[Bug] 部份軟體的中文為方框(例如Evince)

在 archlinux 試,發現預設設定下看這個檔案沒有問題,但把 ubuntu 的 69-language-selector-zhTW.conf 中的設定加入 local.conf 後,就產生了框框的問題(標題變成框框),所以我認為該檔中的設定應該是關鍵。

2004lanyu.pdf 這個檔案在標題的部分可能沒有內嵌字型,使用 poppler 中的 pdffonts 來看,該文件部分字型沒有內嵌,如:DFMing、DFLiShu……等,但標題到底採用何種字型,我不曉得可用什麼工具來看?只能猜測是一般人電腦中沒有的字型。根據 fontconfig 設定中的 49-sans-serif.conf,電腦中找不到相應字型時,會自動用 sans-serif 字型來顯示。

經過幾次實驗,發現把 binding=strong 改成 binding=same 或 binding=weak,就可以正常顯示該 PDF 檔的標題。

查閱 fontconfig 的文件,裡頭有提到,fontconfig 按照需求樣式來比對電腦中可用的字型時,是按照 foundry, charset, family, lang, spacing, pixelsize, style, slant, weight, antialias, rasterizer 與 outline 來決定的,愈前面的愈重要,而 binding 是特殊規則,binding=strong 的強度比 lang 強,binding=weak 比 lang 弱,這使得電腦缺少文件指定的字型時,能依文件語言來主導字型的選擇。

故在此例中,推測 binding=weak 或 binding=same 的時候,會依 PDF 文件的語言—中文,來選擇替代字型,因此沒有出現方框。如果是 binding=strong,似乎是—不管文件內容採用什麼語言,用 prepend 在 sans-serif 的第一個字型蠻幹就是了,所以出現方框。

以上是個人實驗與推測的結果,我只是普通使用者,如有不正確的地方請用力糾正。

(註:請不要說服我用中文字型來顯示英文!!)

coolcd
joined: 2008-01-21
posted: 2601
promoted: 348
bookmarked: 95
2subject: Promote 0 Bookmark 02011-02-05quote  

結果是搞錯了 Orz

在 firefox 的介面正常,英文用英文字型,中文用中文字型,但在 Evince 還是只用 prepend 的第一個中文字型來顯示中、英文。猜想有可能是 Evince 或 Poppler 對 fontconfig 的 fallback 機制支援不足。或者,我前面的解釋是錯誤的,有可能 binding=same 或 binding=weak 時,因為依據文件的 lang 來判斷,強度大於或者覆蓋掉 binding=weak/same,所以依 lang 為主,就是用中文字型。

個人認為,除非中文字型裡的英文有所改善,否則,讓中文字型顯示中文、英文字型顯示英文是必要的手段。看來目前要達成這個目標,仍有待努力。

 

guest
3subject: Promote 0 Bookmark 02011-02-05quote  

Hello Coolcd,

很高興又再看到你,也謝謝你幫忙做測試。

Hemiola

coolcd
joined: 2008-01-21
posted: 2601
promoted: 348
bookmarked: 95
4subject: Promote 0 Bookmark 02011-02-05quote  

太肉腳沒幫上忙 XD

Hemiola 有空可以多來 hyperrate 玩

--

之前我發的兩篇似乎邏輯上有點跳躍,說明一下好了,希望 Evince 達到的目標有二:

  • 正常顯示該檔標題 (字型未內嵌、且系統無該字型的狀況下)
  • 中文字型顯示中文、英文字型顯示英文

而 ubuntu 的 69-language-selector-zh-TW.conf 的內容是類似這樣的

<match target="pattern">
<test qual="any" name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>Bitstream Vera Sans</string>
<string>DejaVu Sans</string>
<string>WenQuanYi Zen Hei</string>
<string>AR PL UMing TW</string>
<string>AR PL ShanHeiSun Uni</string>
<string>WenQuanYi Bitmap Song</string>
<string>AR PL UKai TW</string>
<string>AR PL ZenKai Uni</string>
</edit>
</match>

 

如果使用了 binding=same/weak,即使 prepend 的 font list 有英文字型,但因為範例文件是中文,所以可能因為 lang > binding=same/weak,所以依 lang 為主,直接用 font list 中的第一個中文字型顯示。我發第一篇文章時,因為沒注意到 Evince 中英文、數字仍用中文字型顯示,只注意到框框問題已經解決,所以才會建議用 binding=same/weak,其實在這個設定下,雖然看範例文件已經沒有框框,但其實還是僅用一個中文字型來顯示文件。同時,如果用 same/weak 的話,firefox 介面上的中英文,可以用中文用中文字型、英文用英文字型顯示。

如果用 binding=strong,理論上當使用英文字型顯示中文字失敗後,應該 fallback 到下一個字型,但 Evince 沒有做到這點,同時 firefox 介面上的中英文,都可以中文用中文字型顯示、英文用英文字型顯示。

所以個人的結論是,evince 在顯示 PDF 文件時,對 fontconfig prepend 的 font fallback 支援不足。

即使有人不在意美觀的問題,遇到較冷僻的中文字時,fallback 機制沒做好,照樣跛腳。改用單一中文字型來顯示中英文,也許可解決部分問題,但那不是治本的方法。

guest
5subject: Promote 0 Bookmark 02011-02-05quote  

coolcd

即使有人不在意美觀的問題,遇到較冷僻的中文字時,fallback 機制沒做好,照樣跛腳。改用單一中文字型來顯示中英文,也許可解決部分問題,但那不是治本的方法。

沒錯!這個就是重點!改單一中文字型仍然沒有解決問題。

抱歉刪掉你其他的意見。今天太晚了,我明天再來好好研究。

 

Hemiola

cht電腦資訊字型
adm Find login register
views:16530