[ASP.NET] 當微軟正黑體遇上IE9列印時可能發生的問題
這是一個很奇妙的問題,著實花了不少時間處理,由於過程中沒有查到太多
資訊因此順便記錄一下
問題描述:
使用者反應用IE9進行列印功能時,遇到第六筆資料後會開始發生漏字現象
,而且漏字的情況是隨機並沒有固定在哪一個位置,此外漏字的字數也不
固定,有的是漏一字,有的則漏二字。
該ASP.NET程式是依使用者條件,由資料庫取出資料後,組成HTML Tag輸
出至另一個頁面上,且每一筆資料一頁。
【正常版】
【克漏字填空版】
處理過程:
- 測試其它Browser是否有相同問題,實測結果IE7,IE8,Chrome均正常,他們不
會跟你玩克漏字填空遊戲
- 懷疑是否為IE版本文件解析的問題,因此嘗試以強制限定文件解析採用IE8
的方式來測試,但問題依舊
- 原先程式寫法是直接以Response.Write的方式輸出HTML Tag,而檢視原始碼
這些Tag是未正確置放在Body內容裡,因此先對輸出方式進行調整,而調整方式是
改以一個Literal來輸出HTML,先確保最後render出來的HTML Tage格式是完整的,
但問題依舊
- 嘗試把輸出後的ASPX網頁直接以render後的HTML原始碼,另存為一份HTML
網頁檔,再用IE9開啟後執行列印,結果不會有問題
- 嘗試把內容字串先寫死,不由資料庫取得,同樣採用程式方式組HTML Tag
來render 頁面,結果不會有問題
這下子真的完全沒什麼頭緒了,找不到可能的原因,上網找看看有沒有類似問題
,則也沒什麼具體收獲,而MVP小歐熱心給了一個有關列印的問題參考資料
(http://support.microsoft.com/kb/973479),不過不幸的是仍無法解決,IE9還是喜歡玩
克漏字填空遊戲。
就在幾乎準備放棄要動用微軟技術支援點數時,突然想到之前的測試中,單純的
HTML跟由程式去Render出來的頁面,差別在於套用的CSS,因此試著把原本程式
中套用的CSS先拿掉,賓果!!,列印正常不會漏字了。於是檢查了一下CSS,其
實內容也很簡單,只設定了字體大小及字型,因此接下來就很容易了,試著把字
型先拿掉,再把CSS套進去,列印也正常不會漏字,而原先的字型是『微體正黑體』
,於是為了再驗證是否是『微體正黑體』在搞鬼,因此試著把字型改為新細明體及
細明體,分別再進行測試,其結果列印都是正常的,至此就差不多確定兇手就是
『微體正黑體』了。
至於為何『微體正黑體』會有愛玩克漏字填空遊戲的癖好,這點就不得而知,但
無獨有偶的是MVP保哥在前陣子也遇上『微體正黑體』引起的問題,雖然發生的
問題情況不一樣,但原兇都是『微體正黑體』(詳情:Windows 7 內建的〔微軟正黑體〕在顯示粗體文字時需注意)
結論:
其實沒什麼結論,因為目前只知道『微體正黑體』在IE9上似乎有引發某些怪現象
但至於具體原因不得而知,而我最終的處理方式就是以換掉字型的方式來解決。
註:
後來在Plurk上MVP小歐提供了另一則類似的問題,是在轉PDF時會漏字:
By No.18