[ASP.NET] 當微軟正黑體遇上IE9列印時可能發生的問題

  • 2814
  • 0

[ASP.NET] 當微軟正黑體遇上IE9列印時可能發生的問題

這是一個很奇妙的問題,著實花了不少時間處理,由於過程中沒有查到太多

資訊因此順便記錄一下

 

問題描述:

使用者反應用IE9進行列印功能時,遇到第六筆資料後會開始發生漏字現象

,而且漏字的情況是隨機並沒有固定在哪一個位置,此外漏字的字數也不

固定,有的是漏一字,有的則漏二字。

 

該ASP.NET程式是依使用者條件,由資料庫取出資料後,組成HTML Tag輸

出至另一個頁面上,且每一筆資料一頁。

 

【正常版】

image

 

【克漏字填空版】

image

image

 

 

處理過程:

  • 測試其它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時會漏字:

IE9瀏覽內部網站列印轉成PDF檔案時會漏字

 

若本文對您有所幫助,歡迎轉貼,但請在加註【轉貼】及來源出處,並在附上本篇的超連結,感恩您的配合囉。

By No.18