CMap
CMap(Character Map)は、PDF文書において複合フォント内の文字コードとCID(Character Identifier)とのマッピングを定義するために使用される特殊なデータ構造です。
CMap(Character Map)は、PDF文書において複合フォント内の文字コードとCID(Character Identifier)とのマッピングを定義するために使用される特殊なデータ構造です ( Citation: N.A., 2020 (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) 。CMapは、中国語、日本語、韓国語(CJK)など、大規模な文字セットを必要とする文字体系でテキストをレンダリングする際に不可欠です。CMapにより、PDFプロセッサは文字コードを正しく解釈し、マルチバイトフォントコレクションから適切なグリフを表示できるようになります。
CMapは、文字コード(コンテンツストリーム内で文字を表現するために使用されるバイトシーケンス)をCID(Character Identifier)に変換するマッピングテーブルです。CIDはCIDFont内の特定のグリフを参照します ( Citation: N.A., 2020 (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) 。バイトからグリフへの直接マッピングを使用するシンプルフォントとは異なり、複合フォントは2段階のマッピングプロセスを採用しています。まずCMapを介して文字コードからCIDへ、次にCIDFontを介してCIDから実際のグリフ記述へとマッピングします。
CMapはPDFファイルに直接埋め込むか、標準CMapの定義済みコレクションから名前で参照することができます。Unicodeベースのエンコーディングを含むさまざまなエンコーディングスキームをサポートし、シングルバイトまたはマルチバイトの文字コードをCIDにマッピングできます。CMapは、有効な文字コードとなるバイトシーケンスを指定する1つ以上のコードスペース範囲と、それらのコードに対応するCIDマッピングを定義します。
CMapは、その複雑性と機能性においてシンプルなエンコーディングベクトルとは異なります。可変長の文字コードや数千のグリフを含む文字コレクションへのマッピングを処理できるため、非ラテン文字体系には不可欠です。
PDF生成や操作に携わる開発者にとって、以下の場合にCMapの理解が重要になります。
国際的なテキストの処理: CMapにより、シンプルフォントの256文字制限を超える大規模な文字セットを必要とするCJK言語、アラビア語、ヘブライ語、その他のスクリプトを含む文書を適切にレンダリングできます。
テキスト抽出精度の確保: 適切なCMap実装により、検索、インデックス作成、アクセシビリティ目的でPDFからテキストを正しく抽出できます。正しいCMap定義がないと、文字が読み取れなくなったり、置換グリフとして表示されたりする可能性があります。
アクセシブルな文書の作成: PDF/UA準拠には、テキストを確実に抽出して解釈できることが求められます ( Citation: N.A., 2014 (N.A.). (2014). Document management applications — Electronic document file format enhancement for accessibility — Part 1: Use of ISO 32000-1 (PDF/UA-1) . International Organization for Standardization Retrieved from https://www.iso.org/standard/64599.html ) 。CMapは、特に多言語文書において、支援技術が文書コンテンツを正しく読み取れるようにする上で重要な役割を果たします。
ファイルサイズの最適化: 完全なフォントサブセットを埋め込むのではなく、定義済みのCMapを参照することで、開発者はテキストのレンダリング品質を維持しながらPDFファイルサイズを削減できます。
CMapは、PDF仕様で定義された構造化されたマッピングプロセスを通じて動作します ( Citation: N.A., 2020 (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) 。
コードスペース範囲: CMapはまず、begincodespacerangeおよびendcodespacerangeオペレータを使用して有効なコードスペース範囲を定義します。これらの範囲は、どのバイトシーケンスが有効な文字コードを構成するかを指定します。例えば、CMapは0x00から0xFFまでのシングルバイト値と、0x8140から0x9FFCまでの2バイト値が有効なコードであると定義する場合があります。
CIDマッピング: 有効なコードスペース内で、CMapはbegincidrange、endcidrange、begincidchar、endcidcharなどのオペレータを使用して、文字コードからCIDへの具体的なマッピングを確立します。これらのマッピングは、範囲(連続するマッピングの場合)または個別の文字とCIDのペアとして定義できます。
CMapリソース: CMapは、PDF内のストリームオブジェクトとして埋め込むか、名前で参照できます。Adobeやその他のベンダーが提供する標準CMapは、登録された名前(「Identity-H」や「UniJIS-UTF16-H」など)で識別され、主要な文字体系で一般的に使用されるマッピングを定義しています。
ToUnicode CMap: ToUnicode CMMapと呼ばれる特殊なタイプのCMapは、CIDからUnicode値への逆マッピングを提供し、テキスト抽出と検索機能を可能にします。これは、アクセシビリティとコンテンツの再利用において特に重要です。
書字方向: CMapは書字方向(水平の場合はH接尾辞、垂直の場合はV接尾辞)も指定し、テキストのレンダリング時にグリフの向きと配置に影響します。
- CIDFont – Character Identifierを使用してグリフを参照し、複合フォントテキストのレンダリングのためにCMapと連携して機能するフォントタイプ
- Composite Font(複合フォント) – 大規模な文字セットと複雑な文字体系をサポートするために、CMapとCIDFontを組み合わせたフォントアーキテクチャ
- Character Identifier (CID) – 文字コレクション内の特定のグリフを参照するために複合フォントで使用される数値識別子
- Glyph(グリフ) – フォントデータからレンダリングされる文字またはシンボルの視覚的表現
- ToUnicode CMap – テキスト抽出とアクセシビリティのために文字コードをUnicode値にマッピングする特殊なCMap
- (N.A.) (2020)
- (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html
- (N.A.) (2014)
- (N.A.). (2014). Document management applications — Electronic document file format enhancement for accessibility — Part 1: Use of ISO 32000-1 (PDF/UA-1) . International Organization for Standardization Retrieved from https://www.iso.org/standard/64599.html
