« 2007年05月28日 | メイン | 2007年05月30日 »

2007年05月29日

Window Vistaで文字化けするPDF

今日、お客さんからAntenna House PDF Viewerで文字化けするPDFがあるので、調べて欲しい、という要請がありました。早速、調べてみましたところ、このPDFは、確かにAdobe ReaderでWindowsXPでは正しく表示されます。しかし、Window Vistaで表示しますと文字化けしてしまいます。次の図をご覧ください。

■問題のPDFをWindows XP上でAdobe Readerで表示したところ。
20070529-1.PNG

■問題のPDFをWindows Vista上でAdobe Readerで表示したところ。
20070529-2.PNG

このように同じPDFの表示が、Windows XPとWindows Vistaでまったく異なってしまいます。

なぜ、こんなことが起きるのでしょうか?

このPDFの特徴は、
(1) フォントが埋め込まれていない。
(2) 文字コードも使われていなくて、文字コードの代わりにCID(グリフID)が使われています。
(3) CIDを使った場合、CIDを文字コードに変換するために、 ToUnicode CMAPという変換テーブルを用意しないといけないのですが、そのテーブルが用意されていません。

ですので、例えば、このPDFをWindowsXPのAdobe Readerで表示して、テキストを選択、コピーして、他のアプリケーションにペーストしますと、文字が化けてしまいます。

では、Adobe Readerで正しく表示できるのはなぜかと言いますと、このPDFのフォントはMS明朝・MSゴシックですが、フォントの Encoding が Identity-H で任意の2バイトコードになっています。そこで、推測ですが、Adobe Readerは、PDFの中のグリフIDを受け取って、指定されたフォントのグリフIDでWindowsの画面に表示しているものと思われます。

注意すべきことは、グリフIDは、フォント固有になっているのでフォント間で互換性がありません。このケースでは、たまたまPDFを作った環境とPDFを表示する環境のフォントがまったく同じなので一見正しく表示できているのでしょう。要するに偶然うまく表示できていると思います。

Windows XPのMS明朝・MSゴシックは、V2.31です。
ところが、Windows VistaではMS明朝・MSゴシックはV5で、恐らくグリフIDが変わっているため、Vistaで表示すると文字が化けてしまうものと思います。

この、PDFを正しく表示できるようにするには、

(1)フォントを埋め込むか
(2)CIDではなく、文字コードを使うか
(3)ToUnicodeCMAPを用意する

のどれかの対処が必要です。

ちなみに、このPDFは、SVF for JAVA Printで作られたものです。
20070529-3.PNG

そういえば、SVF for JAVA Printって、国税庁のWebでも使っていたな、と思って、確定申告のPDFを作ってみました。しかし、こちらはWindowsVistaでも文字化けしないようです。
20070529-4.PNG
このPDFのProducer情報
20070529-7.PNG

この違いは何でしょうか?

■文字化けする方のPDFは、フォントのエンコーディングがIdentity-Hになっています。
20070529-5_prop.jpg

■文字化けしない方のPDFは、フォントのエンコーディングが違います。
20070529-6_prop.jpg

なので、SVF for JAVA Printの設定によって変わるようです。それともバージョンによって違うのでしょうか?これは、ウイングアークに聞いてみないと分かりません。でも、Vistaが普及したらSVFで作ったPDFは、文字化け問題が頻発する懸念があります。会社によっては、10年後に、昔作った帳票PDFを見ようとしたら全部文字化けで大騒ぎ、なんてことになりかねません。

あなたの会社は、大丈夫ですか?

投票をお願いいたします

投稿者 koba : 08:00 | コメント (1) | トラックバック