UbuntuJapaneseWiki

症状の概要

EvinceでPDFを表示すると、日本語フォントが正常に表示されない。

機序

Evince(正確にはバックエンドのpoppler)がfontconfigを使って「表示に利用するフォント」を選定する上で、誤った方法で「最初に出てきたフォント」を利用している

機序の推定方法

後者の方法はワークアラウンドとしても利用可能。

調査

解決に向けたアプローチ

ワークアラウンド

Evinceのフォント選定方法でも問題がないようにfontconfigを補正する。

see [/fontconfig]

根治方法

Evinceのフォント選定問題を直す

潜在的問題

後回しにしても致命的ではない(と思われる)問題。

テスト手法

another-test.pdf が正常表示できるかどうかで判定可能と見られる。

another-test2.pdf に、Ubuntuに存在することが期待されるフォントを入れてみたが、結果は一緒

テスト例(by Mocchi)

Mocchiがtest.pdfとanother-test.pdfで確認した結果が以下表。

(対象)

(release)

(poppler-data)

(欧文フォント)

(和文フォント)

test.pdf

Natty

正常に表示

「透明な文字」

test.pdf

Natty

あり

正常に表示

正常に表示

another-test.pdf

Natty

正常に表示

「透明な文字」

another-test.pdf

Natty

あり

正常に表示

「トーフ」

test.pdf

Lucid-ja

正常に表示

正常に表示

test.pdf

Lucid-ja

あり

正常に表示

正常に表示

another-test.pdf

Lucid-ja

正常に表示

正常に表示

another-test.pdf

Lucid-ja

あり

正常に表示

正常に表示

another-test.pdfでの「トーフ」の実例: evince2-mocchi.png

テスト例(by HiroshiChonan)

参考までにHiroshiChonanのmaveric上でのスクリーンショット。poppler-dataインストール済み。

maverick-ss-chonan.jpg

テスト用PDF

(第三・第四カラム目のフォント情報はEvinceの[ファイル]→[プロパティ]で表示されるフォントタブから取得したもの。一部謎の結果がかえっている)

test.pdf

Nattyでの結果: 代替成功・正常表示

非埋込

Ryumin-Light=identity-H

Type 1 (CID)

非埋込

CMEX10

Type 1 (CID)

埋込

CMMI7

Type 1C

埋込

CMMI10

Type 1C

埋込

CMR10

Type 1C

another-test.pdf

Nattyでの結果: 代替失敗・トーフ

非埋込

TimesNewRoman

TrueType

非埋込

TimesNewRoman

TrueType

非埋込

TimesNewRoman

TrueType

非埋込

TimesNewRoman

TrueType

非埋込

TimesNewRoman

TrueType

g_emb.pdf

Nattyでの結果: 代替成功・正常表示

埋込

TakaoGothic

TrueType (CID)

埋込

TakaoMincho

TrueType (CID)

埋込

TakaoMincho

TrueType (CID)

g_non_emb.pdf

Nattyでの結果: 代替成功・正常表示だが縦書き一部がトーフ

非埋込

GothicBBB-Medium-Identity-V

Type 1 (CID)

非埋込

Ryumin-Light=identity-H

Type 1 (CID)

非埋込

Ryumin-Light=identity-V

Type 1 (CID)

g_test.pdf

Nattyでの結果: 代替成功・正常表示だが1ページ目の題字部分の縦書きがトーフ

非埋込

GothicBBB-Medium-Identity-V

Type 1 (CID)

非埋込

Ryumin-Light=identity-H

Type 1 (CID)

非埋込

Ryumin-Light=identity-V

Type 1 (CID)

埋込

TakaoGothic

TrueType (CID)

埋込

TakaoMincho

TrueType (CID)

埋込

TakaoMincho

TrueType (CID)

追記 印刷に対する影響など by KojiOtani

印刷への影響

Ubuntuでは、印刷システムがpopplerを使用しているために、印刷にもこの問題の影響が出る。問題の出るPDFファイルをlpr等で直接、印刷すると紙の上で問題が再現する。Evinceから印刷しても、表示と同様にトーフが印刷される。 それ以外のアプリケーションでも、印刷ファイルとして出力するPDFやPSファイルにフォントを埋め込んでいない場合には、同様の問題が発生する可能性がある。

popplerの動作

popplerは、PDFで指定されたひとつのフォントに対してはただひとつのフォントしか選択していない。そのフォントにグリフがなければトーフ(実際に表示されるものは、フォント依存)になる。 PDFやPSは、そのファイル内ではCIDフォントを指定している。popplerは、CIDフォントの代わりになるものをTrueTypeフォント等で代替するという動作をしており、通常のアプリとは、フォントの指定方法が異なり、グリフがないから次のフォントといった動作は簡単ではない。少なくとも大幅な変更が必要となるので、すぐには修正は難しい。

縦書きについて

g_no_emb.pdfで縦書きのフォントが一部トーフになるのも、まったく同様のフォント選択の問題であって他の問題はない。vmapは関係ない。Ryumin-Lightはうまく表示できて、GothicBBB-Mediumがうまくいかないのは、Lightは認識してMediumを認識していないから。

fontconfigの設定の補正について

ワークアラウンドで提案されているfontconfigの設定を補正する方法で、印刷の問題も同様に解決できる。

個人的には、ひとつのフォント指定に対して、Latin-1のフォント+日本語フォントの組み合わせを使うのは問題があると思う。 なぜなら、日本語フォント内の英字グリフは、漢字などのグリフと合わせて統一してデザインされており、本来それを使うべきだと思う。 違うデザインのフォントを使用する場合は、そもそも、違うフォントとしてアプリが指定するべきことである。 なので、このワークアラウンドで修正としては問題はないと思う。

popplerの修正について

とはいえ、Latin-1フォント+日本語(CJK)フォントの組み合わせをどうしても使いたいというユーザもいるようなので、他のアプリに影響しないようpoppler内でごまかす方法を考える。

前述したようにfallbackするのは大変なので、フォントの選択時にAdobe-Japan1に対し、日本語をサポートしていないフォントを選択しないよう変更することが考えられる。Japan2やChinese, Koreanでも同様に処理する。

UbuntuJapaneseWiki: Develop/Natty/Evince (最終更新日時 2012-01-10 11:49:17 更新者 匿名)