PDF 内部構造 CMapのソースを表示
新しいページはコチラ
移動:
案内
,
検索
[[PDF 内部構造 テキスト#/ToUnicode|PDF 内部構造 テキスト]]へ戻る。 == '''概要''' == CMapは、グリフの番号のGID(フォントファイルに格納されている順番の番号)と文字番号のCID(文字コードの意味をもつ番号)とを解決する割り当て表みたいなものです。[https://adobe-type-tools.github.io/font-tech-notes/pdfs/5014.CIDFont_Spec.pdf 仕様書PDFはコチラ]から入手可能。PDFでは特殊なCMapはストリームとして記述して、内部に埋め込む必要があります。以下がPDFにおけるTo Unicode部としてのCMap情報の埋め込みの例です。CMapファイルを構成する場合はもっと多くの辞書定義が必須となります。 <Syntaxhighlight2 lang="text" line=1> 15 0 obj << >> stream /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def /CMapName /Adobe-Identity-UCS def /CMapType 2 def 1 begincodespacerange <0000> <FFFF> endcodespacerange 17 beginbfchar <0003> <0020> % <0030> <004D> %M <0036> <0053> %S <0838> <3044> %い <084B> <3057> %し <0862> <306E> %の <089B> <30A9> %ォ <08A1> <30AF> %ク <08A6> <30B4> %ゴ <08A9> <30B7> %シ <08B5> <30C3> %ッ <08BA> <30C8> %ト <08C7> <30D5> %フ <08E5> <30F3> %ン <0B61> <4E16> %世 <23FA> <754C> %界 <2A3E> <7F8E> %美 endbfchar endcmap CMapName currentdict /CMap defineresource pop end end endstream endobj </Syntaxhighlight2> CMapファイルの仕様書を読んでみました。英語ですが、100ページくらいに同じようなことを繰り返し解説している部分を含めたものになっていて、実質50ページくらいの感じです。繰り返すことで、わかりやすくなっています。CMapファイルそのものは、それほど難しいものではないということです。読み込んではいないので、全てのキーワードについて深い理解をしたわけではないですが、ひも解いていきましょう。 まず、最初のこれは /CIDInit /ProcSet findresource begin いまからCMapの内容を書くので、PostScript言語を動かすプログラム資源を見つけて準備をしてくれって感じなんですね。用意したもを使ってファイルの最後の40行目のendまで処理するということを記述しています。仕様書の付録Aにやんわりと書かれています。PostScriptの初期化では以下のようなファイルを動かすんだそうです。 *Sys/Start *Resource/ProcSet/CIDInit *FS/Level1 *FS/Level2 *fonts/NotDefFont Sys/Startはプリンタで印刷するときに動かすようなsysの下のstart.psっていうのを動かすそうです。Windowsの場合はそんなディレクトリはないので、違うところにあるんでしょう。DisplayPostScript™システムはdpsstartup.psと呼ばれるファイルを使用をするということも書かれています。PostScriptには「PostScript Level1」(1984年)、「PostScript Level2」(1990年)、「PostScript3」(1996年)の3種類がありますので、FS/Level1とか、FS/Level2というのは、古いPostScriptを動かす時に使うとかということも書いてあります。実際には書いてないレベルの違うものを紹介しているだけ。Level1とか2の背景を知っていれば、どういう意味か予想できる。現在はどうなってるのかわからんね。Adobe Acrobatのフォルダにはreesourceというフォルダとその中にcmapやcidfontやfontってフォルダはあるので、AcrobatReaderでPDFを使うときにCIDFontを使うとこのあたりのファイルが使われたりするんだと思う。GhoostScriptでPostScriptを動かすとまた違うものが使われたりするんだと思います。 /CIDInit /ProcSet を準備して動かすのがCMapの通常のあり方です。Adobeが準備したCMapも同じようになっています。 この後に辞書が始まるという意味で 12 dict begin のようなキーワードを記述します。今から定義される実際の辞書の個数よりも大きい数値として、12 になっています。5個くらいは大きめにしておくのが普通らしいです。少ないとdictfullエラーというのが返されるそうです。これに対応する終了部分が39行目のendです。この区間の中でcmapが記述できます。cmapの始まりとして begincmap を記述します。対応する終了部分が38行目のendcmapです。 この例ではCMap記述部分に以下の情報が記述されています。 */CIDSystemInfo */CMapName *begincodespacerange *beginbfchar 順番に意味を説明します。 ==== '''/CIDSystemInfo''' ==== ここにCIDFontの情報を記述します。必須の情報です。説明の要素が強い情報です。PDFのビューワーから、この情報にアクセスして、どんなCIDFontが使われているのかを知る術になっているようです。 この中に3つの辞書を設定します。 */Registry : このCID情報の登録者文字列を設定します。個人でフォントを登録することは少ないので会社名であることが多いようです。よく使われるのが (Adobe) です。文字列です。 */Ordering : 文字のエンコーディング方式名を設定します。Identityならそのまま、UCSはユニコードシーケンス。といった具合です。(Japan1) ならAdobeJapan1です。 */Supplement : 補足です。ここには文字のエンコーディング方式の世代番号のようなものを登録します。整数です。0~65535くらいまで設定できます。AdobeJapan1の場合は登録文字数によって 0~7 に分けられています。7はUnicode文字セットのほとんどを収録しているようなフォントになります。 設定した最後には def という文字が必要です。これは全ての辞書に共通することです。 /辞書名文字列 設定値 def /辞書名文字列 << /辞書名文字列1 設定値 /辞書名文字列2 設定値 ... /辞書名文字列n 設定値 >> def のようになります。 ==== '''/CMapName''' ==== [[PDF 内部構造 テキスト#/ToUnicode|PDF 内部構造 テキスト]]へ戻る。
PDF 内部構造 CMap
に戻る。
個人用ツール
18.117.75.226
このIPアドレスのトーク
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ