[SSRS] Reporting Services 文字化け:異なる OS 間の PDF 文字化け

森  隆博
SQL Developer Support Engineer

皆さん、こんにちは

Reporting Services を使用していて、文字化けに遭遇したことはありませんか?
文字化けが発生する状況はいくつかパターンがありますが、今回はレポートからエクスポートした PDF が文字化けしているという現象について記載します。

 

シナリオ

以下のような環境を想定してください。

・Reporting Services が稼動しているマシン:Windows XP や Windows Server 2003
・ブラウザを起動してレポートを表示するクライアントマシン:Windows Vista や Windows 7、Windows Server 2008

この様な場合、レポート表示後、エクスポートした PDF が文字化けすることがあります。

 

なぜ文字化けが発生するのか?

ここでは説明の簡略化のため、仮称として Windows Server 2003 や Windows XP 等を 旧 OS 環境、Windows Vista や Windows 7、Windows Server 2008 を新 OS 環境と呼びます。

旧 OS 環境と新 OS 環境は、内部で使われている JIS の文字コードが異なります。
JIS の規格で新たに追加された文字を Windows でも対応するために、Windows Vista 以降の OS では新しい JIS の文字コードを使用できるようになりました。

たとえば「あ」という文字があります。
「あ」という文字の字体をグリフといいます。
コンピューター内部では、実際は「あ」という文字は何番、という ID を持っています。これをグリフ ID といいます。

つまりグリフ ID とは、ひとつひとつの文字のイメージを表すグリフ毎に割り当てられた識別子のことです。
新 OS の一部のフォント ファイルで、英語以外の文字のグリフ ID が変更されました。

このグリフ ID の違いにより、旧 OS 上の IE から新 OS 上で稼働する Reporting Services のレポートを実行し、エクスポートした PDF を表示すると次の問題が生じることがあります。

1) Reporting Services は '自分の環境' である新 OS のグリフ ID を PDF に保存します。
2) PDF ファイルは、グリフ ID の情報を保持しています。PDF Viewer (Adobe Reader など) で上記の PDF を表示すると、PDF 内のグリフ ID にマッピングされたグリフを旧 OS のフォント ファイルから取得し表示しようとします。
3) 新旧 OS でグリフ ID に対応するグリフが異なる文字は、文字化けが生じます。

  

対処方法

この文字化けの現象に対応するためには以下いずれかの対処方法が有効です。

・フォント埋め込みに対応した Reporting Services を使用する。
・旧 OS 環境に JIS2004 新しいフォントパッケージをインストールする。

フォント埋め込みに対応した Reporting Services を使用する。
PDF にマッピング情報を保持するのではなく、PDF に文字を埋め込むことで、マッピングのずれによる文字化けを防げます。
フォントを埋め込むと、フォント ファイルからグリフなど文字の表示に必要な情報が PDF に取り込まれます。
そのため、PDF を別のマシンで表示しても、そのマシンのフォント ファイルを使用しないため、文字化けを防ぐことができます。

文字の埋め込みを行うには、埋め込み機能を有するバージョンの製品を使う必要があります。

    SQL Server Reporting Services を使用しているなら
    SQL Server Reporting Services 2008 CU1 から埋め込みに対応しています。

        参考情報:SQL Server Reporting Services のレポートを PDF ファイルにエクスポートするとレポートに文字が正しく表示されない

    Report Viewer コントロールを使用しているなら
    Visual Studio 2010 の Report Viewer コントロールから埋め込みの機能に対応しています。

    ※文字コードを保持するのではなく、文字を埋め込んだ場合その分 PDF のファイルサイズが大きくなります。

    フォント埋め込みに対応した Reporting Services の使用が難しい場合、以下のようにフォントパックで対応できます。

 

旧 OS 環境に JIS2004 新しいフォントパッケージをインストールする。
旧 OS 環境に 新 OS 環境 のフォント、JIS2004 フォントパッケージをインストールすることで、双方で使用される文字コードが一致して文字化けを回避することができます。

    参考情報:Windows XP および Windows Server 2003 で JIS2004 対応フォントを使用する方法