關於Reporting Service PDF中文亂碼的一點研究

最近研究到SSRS的匯出PDF功能,由於應用平台涵蓋SSRS 2000,對於PDF的中文亂碼問題多了一點心得,特整理備忘。

首先,PDF對於字型有兩處理方式: 第一種是只記載各段文字所使用的字型,Client端讀取軟體開啟時再使用所處作業系統相同名稱的字型繪製文字。因此,Client端與製作文件端的字型檔必須100%相同,才能產生 完全一致的呈現結果。當跨越不同平台時容易衍生問題,例如Linux、Mac與Windows的標楷體不盡相同,便可能發生閱讀時看到的排程與原始設計有所出入的情況。

於是PDF提供第二種做法: 把有文件中用到的中文字向量資料從字型檔擷取出來嵌入PDF中,如此即便Client沒有安裝相同字型也能正確顯示。(也可以將整個字型檔全部嵌入,如此該PDF檔未來甚至能直接在Client端編輯,但中文字型檔常高達數十MB,實務上較少有嵌入完整中文字型的做法)

SSRS從2005起才開始支援PDF字型內嵌(SSRS 2005SSRS 2008),SSRS 2000並不支援:

Fonts

The PDF rendering extension does not embed fonts. Fonts that are used in the report must be installed on the report server and on the client computers used to view the report.
來源: http://technet.microsoft.com/en-us/library/aa178934(SQL.80).aspx

換句話說,SSRS 2000匯出的PDF檔要正確呈現,Client必須具備跟Report Server完全相同的字型。那麼如果Server跟Client都是Windows,通通用最保險的"新細明體"總行了吧?

很不幸地,答案是"未必"!

從Vista/Windows 2008起,微軟內建的新細明體(PMingLiU)字型改採Unicode 3.1標準,造成Windows 2000/XP/Windows 2003上的"新細明體"與Vista/Windows 7+/Windows 2008的"新細明體"變成兩套規格不同的字型,在Windows 2000/Windows 2003使用指定新細明體製作PDF檔,在XP上開啟還算正常,一旦改用Windows 7,照樣亂碼滿天飛。
(補充: 依維基百科,XP/Windows 2003用的是新細明體3.21-4.55,Vista/Win2008起為新細明體6.02版,開始改採Unicode 3.1標準,微軟曾出了一個新細明體更新套件試圖讓XP/2003的新細明體也改為Unicode 3.1標準,但問題不斷罵聲不絕,黯然下架...)

最後來個實驗驗證。製作一個RDL檔,放入八個TextBox分別標註成不同字體(新細明體用"PMingLiU"及"新細明體"中英文FontFamily各測一次),Value的部分則為FontFamily值加上"中文測試"四個字:

      <Textbox Name="textbox8">
        <Top>1.25in</Top>
        <Width>1.8in</Width>
        <Style>
          <FontFamily>Arial Unicode MS</FontFamily>
          <PaddingLeft>2pt</PaddingLeft>
          <PaddingRight>2pt</PaddingRight>
          <PaddingTop>2pt</PaddingTop>
          <PaddingBottom>2pt</PaddingBottom>
        </Style>
        <ZIndex>7</ZIndex>
        <CanGrow>true</CanGrow>
        <Left>1.625in</Left>
        <Height>0.25in</Height>
        <Value>Arial Unicode MS 中文測試</Value>
      </Textbox>

測試一 SSRS 2000 on Win2003,Client端為Win2003,PDF只有細明體及新細明體正確無誤

測試二 SSRS 2000 on Win2003,Client端為Win7,PDF中連新細明體都爆了

測試三 SSRS 2005 on Windows 2003,Client端為Win7,PDF顯示大致正常,只有Arial因屬純英文字型,不含中文字,故中文部分變成方塊,PDF不像Word/網頁,若該字在指定字型找不到對應時並不會改用預設字型,故Arial中大變方塊的行為還算在預期之內。

結論: SSRS 2000的PDF匯出功能在中文呈現上有嚴重缺陷,塊陶啊~

歡迎推文分享:
Published 11 January 2013 12:44 PM 由 Jeffrey
Filed under:



意見

# Alex Lee said on 14 January, 2013 06:06 AM

現在都已經2013了..... 2000就如同IE6一般讓它隨風去吧

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<January 2013>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789
 
RSS
【工商服務】
OrcsWeb: Windows Server Hosting
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication