Skip to main content
Interwork Corporation
IDR Solutions Product Support Portal
PDF開発用語集 モードの切替 ダーク/ライト/自動 モードの切替 ダーク/ライト/自動 モードの切替 ダーク/ライト/自動

Hexadecimal string

16進文字列は、PDF仕様で定義されている2つの文字列形式のうちの1つで、データの各バイトが山括弧 `<...>` で囲まれた2桁の16進数値として表現されます。

カテゴリ: General PDF Concepts
キーワード: hexadecimal string, Hexadecimal string

概要

16進文字列は、PDF仕様で定義されている2つの文字列形式のうちの1つで、データの各バイトが山括弧 <...> で囲まれた2桁の16進数値として表現されます。 ( Citation: N.A., (N.A.). (). Document management — Portable document format — Part 2: PDF 2.0 International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) この形式はリテラル文字列の代替手段を提供し、バイナリデータ、非ASCII文字を扱う場合や、PDF文書内の文字列コンテンツに対してバイトレベルでの正確な制御が必要な場合に特に有用です。

定義

PDFにおける16進文字列は、山括弧で囲まれた16進数のペア(0-9、A-F)のシーケンスで、各ペアが実際の文字列データの1バイトを表します。例えば、<48656C6C6F> はASCII文字列「Hello」を表します(48=H、65=e、6C=l、6C=l、6F=o)。山括弧内の空白文字は無視されるため、開発者は長い16進文字列を可読性のために複数行にわたってフォーマットすることができます。

これは、括弧 (...) で囲まれ、人間が読めるテキストを含むリテラル文字列とは異なります。リテラル文字列では括弧やバックスラッシュなどの特定の文字に対して特別なエスケープ処理が必要ですが、16進文字列ではエスケープなしで任意のバイト値を直接表現できます。16進文字列に奇数個の桁が含まれる場合、PDF仕様では末尾にゼロが自動的に追加されます。

16進文字列では、16進数のA-Fは大文字小文字を区別しないため、<4A><4a> は同じ値を表します。PDFでは、フォントグリフ識別子、暗号化データ、画像のカラー値、および適切なバイトオーダーマークと組み合わせたUnicodeテキストのエンコードなどに一般的に使用されます。

重要性

PDF文書を扱う開発者にとって、16進文字列はリテラル文字列では容易に表現できないバイナリデータや非標準の文字エンコーディングを処理するために不可欠です。プログラムによってPDFを生成または解析する際、フォントエンコーディング(文字コードがグリフにマッピングされる場所)や画像とグラフィックスのカラー指定において16進文字列に遭遇します。

16進文字列の理解は、PDFコンテンツストリームのデバッグ、暗号化された文書の処理、またはカスタムフォントマッピングの実装において重要になります。多くのPDFライブラリはリテラル文字列と16進文字列形式間の変換を自動的に行いますが、各形式がどのような場合に適切かを知ることで、より効率的なコードを書き、問題をより効果的にトラブルシューティングできます。

この形式は、アクセシビリティ実装においても重要です。Tagged PDF構造内のUnicodeテキストは、異なるプラットフォームや言語間で適切な文字エンコーディングを確保するために16進文字列を使用する場合があります。

仕組み

PDFプロセッサが山括弧に遭遇すると、各16進数のペアを対応するバイト値に変換することで、内容を16進文字列として解釈します。プロセッサは左から右へ文字を読み取り、空白文字(スペース、タブ、改行)を無視しながら、16進数のペアを蓄積します。

例えば、16進文字列 <416C6C6F> は次のように処理されます:

  • 41 → バイト値 65(ASCII ‘A’)
  • 6C → バイト値 108(ASCII ’l’)
  • 6C → バイト値 108(ASCII ’l’)
  • 6F → バイト値 111(ASCII ‘o’)

結果として「Allo」を表す4バイトのシーケンスになります。

これらのバイトの解釈はコンテキストに依存します。テキスト文字列では、ASCII文字、UTF-16BEエンコードされたUnicode(バイトオーダーマーク <FEFF> が前置された場合)、またはPDFDocEncodingを表す場合があります。他のコンテキストでは、バイトは暗号化キーや圧縮された画像データなどの生のバイナリデータを表す場合があります。

プログラムで16進文字列を書き込む際、開発者はソースデータの適切なエンコーディングを確保する必要があります。Unicodeテキストの場合、これは通常、UTF-16BE形式に変換し、BOMを前置することを意味します:<FEFF> に続いて16進エンコードされたUTF-16バイトです。これにより、すべてのPDFビューアで一貫したテキストレンダリングが保証され、アクセシビリティ機能をサポートするTagged PDF文書において特に重要です。

関連用語

  • Literal string(リテラル文字列) – エスケープシーケンスを使用した読み取り可能な文字で括弧で囲まれたテキスト
  • String object(文字列オブジェクト) – リテラル文字列と16進文字列形式の両方を包含する一般的なPDFデータ型
  • PDFDocEncoding – 他のエンコーディングが指定されていない場合にPDF文字列に使用されるデフォルトの文字エンコーディング
  • Text string(テキスト文字列) – Unicodeを含む可能性のある人間が読めるテキストに使用されるPDFの特殊な文字列型
  • Content stream(コンテンツストリーム) – テキストおよびグラフィックス操作のための16進文字列を含む可能性のあるPDFストリームオブジェクト

出典

(N.A.) (2020)
(N.A.). (). Document management — Portable document format — Part 2: PDF 2.0 International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html