日本語を含む Keynote を slideshare にアップロードする

次のエントリーにあるように、最近 Keynote を PDF に変換して slideshare にアップロードすると、Osaka 等一部のフォントを除いて日本語が表示されなくなりました。
KeynoteのスライドをSlideShareにアップロードすると日本語が表示されない問題 - Qiita

ワークアラウンドとして、次のコマンドで PDF を変換した上でアップロードすると正常に表示されるようになるかもしれません。

$ LANG=C LC_ALL=C sed -i '' s'|/Registry (Adobe) /Ordering (Japan1) /Supplement [0-9]|/Registry(Adobe) /Ordering(Identity) /Supplement 0|g' /path/to/pdf

ブラウザ上で変換したい方はこちらを参照してください。

何故日本語が表示されるようになるか?

PDF の構造に詳しくないので間違っているかもしれませんが、ググッて自分なりに解釈した内容を以下にまとめます。

フォントを表示するには次のような変換が行われます。

文字コード → CID (Character ID) → GID (Glyph ID) → フォント(グリフ)

次のページの図が非常にわかりやすいです。
CMap・cmap(Character Map) | フォント用語集 | 文字の手帖 | 株式会社モリサワ

っで、文字コードと CID の対応関係は CMap が管理しており、CID の集合は Adobe-Japan1-6, Adobe-Identity-0 等いくつもの種類が存在します。
PDF の CIDSystemInfo には Registry, Ordering, Supplement (頭文字をとって ROS) の情報が記述されており、Adobe-Japan1-6 は Registry: Adobe, Ordering: Japan1, Supplement 6 です。
ROS ごとに CMap テーブルが存在するわけですが、slideshare では Adobe-Japan1-6 の CMap テーブルを持っていないんだと思います。なので、文字コードに対応するフォントを表示できないんじゃないかと。
一方、Adobe-Identity-0 の CMap テーブルは持っているようなので、ROS を Adobe-Japan1-6 から Adobe-Identity-0 に変換することでフォントが表示できるというということかと思います。

Adobe-Identity-0 の CMap テーブルの内容は Adobe-Japan1-6 の CMap テーブルの内容を包含しているようなので、変換も正しく行われるようです。


5/19 追記

SlideShare に問い合わせてみました。次のような内容をめちゃくちゃ丁寧に送ったつもりです。

  • Keynote で生成した PDF の大半は日本語フォントが表示されない。日本人にとってクリティカルな問題
  • Adobe-Japan1-6 を Adobe-Identity-0 にしたら表示された(デモ用の PDF と slideshare のリンク付き)
  • Adobe-Japan1-6 の CMap がないだけだと思うから、簡単に直せると思う

それに対する回答は次のとおりでした。

Thanks for contacting us about this. What you’ve encountered is a known issue and I’m very sorry for the inconvenience. Our engineering team is working on it but there’s no estimate as to how long that might take. We’ll do our best to keep you posted.

要約すると、「対応中だけど解決の目処が立ってない」ってところでしょうか。
うーん・・・いつになったら対応されるのやら・・・

広告
MobileSafari でプログレスバーを出さないように画像を読み込む MeCab ソースコードリーディング私的メモ(形態素解析編)
※このエントリーははてなダイアリーから移行したものです。過去のコメントなどはそちらを参照してください