リテラル文字列(Literal string)
リテラル文字列は、PDF構文における2つの基本的な文字列オブジェクトタイプの1つであり、括弧`(...)`で囲まれたテキストで構成され、PDFファイル内で文字データを直接表現します。
リテラル文字列は、PDF構文における2つの基本的な文字列オブジェクトタイプの1つであり、括弧(...)で囲まれたテキストで構成され、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
)
。16進数文字列とは異なり、リテラル文字列は人間が読める形式を使用し、直接入力できない文字を表現するための特殊なエスケープシーケンスを備えています。この文字列タイプは、PDFドキュメント全体でテキストコンテンツ、メタデータ、およびさまざまな文字列ベースのプロパティに一般的に使用されます。
PDFにおけるリテラル文字列は、左括弧と右括弧の間に記述される文字のシーケンスであり、文字が直接それ自身を表現します。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
)
。
リテラル文字列は、山括弧<...>で囲まれた16進数文字列とは異なり、16進数のバイト値としてではなく、文字を自然な形式で表現します。16進数文字列では各バイトを2桁の16進数として記述する必要がありますが、リテラル文字列では印字可能なASCII文字のほとんどを直接記述できるため、PDFソースコードの可読性が高くなります。
リテラル文字列形式は、バックスラッシュ文字(\)で始まるさまざまなエスケープシーケンスをサポートしています。これには、ラインフィード用の\n、キャリッジリターン用の\r、水平タブ用の\t、バックスペース用の\b、フォームフィード用の\f、左括弧用の\(、右括弧用の\)、バックスラッシュ自体用の\\が含まれます。さらに、文字コードは8進数表記を使用して\dddの形式で指定できます(各dは8進数の桁です)。
PDF生成または操作を行う開発者にとって、リテラル文字列の理解は不可欠です。なぜなら、リテラル文字列はPDFソースコードで人間が読めるテキストデータを表現する主要な方法だからです。プログラムでPDFオブジェクトを作成する際、リテラル文字列と16進数文字列のどちらを選択するかは、コードの可読性、ファイルサイズ、およびエンコーディングの複雑さに影響します。
リテラル文字列は、PDFソースファイルで簡単にデバッグまたは検査する必要があるテキストを扱う際に特に重要です。人間が読める形式により、開発およびテスト中にコンテンツの問題を特定することが容易になります。ただし、開発者は構文エラーを防ぎ、特殊文字が最終的なPDFドキュメントで正しく表現されるように、エスケープ規則を適切に実装する必要があります。
リテラル文字列構文の理解は、アクセシビリティ実装においても重要です。なぜなら、文字列はアクセシブルなPDF機能をサポートする構造要素やメタデータで広範に使用されるからです ( 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 ) 。不適切な文字列エンコーディングやエスケープは、アクセシビリティの失敗やコンテンツ抽出の問題につながる可能性があります。
PDFパーサーは、開始括弧(と終了括弧)の間のすべての文字を読み取り、遭遇したエスケープシーケンスを解釈することで、リテラル文字列を処理します。パーサーがバックスラッシュに遭遇すると、後続の文字を調べて適切な解釈を決定します。
- 単一文字エスケープ(
\n、\r、\t、\b、\f、\(、\)、\\)は対応する文字値に変換されます - 8進数エスケープ(
\ddd)は8進数から対応するバイト値に変換されます - バックスラッシュの後に改行(キャリッジリターン、ラインフィード、またはその両方)が続く場合は無視され、PDFソース内で長い文字列を複数行にわたって記述できます
- バックスラッシュの後に認識されたエスケープシーケンスの一部ではない他の文字が続く場合、通常はバックスラッシュが無視され、その文字がそのまま使用されます
リテラル文字列には、エスケープせずにバランスの取れた括弧のペアを含めることができます。たとえば、(Text with (nested) parentheses)は、各開き括弧に対応する閉じ括弧がある限り有効です。ただし、バランスの取れていない括弧はエスケープする必要があります:(Closing parenthesis: \))。
リテラル文字列内で使用される文字エンコーディングは、コンテキストに依存します。テキスト文字列の場合、エンコーディングは文字列の先頭バイトをバイトオーダーマーク(BOM)として調べるか、デフォルトでPDFDocEncodingになります。他の文字列タイプの場合、解釈はそれらを含むPDFオブジェクトに基づいて異なる場合があります。
- Hexadecimal string(16進数文字列) – 山括弧と各バイトの16進数表記を使用する代替文字列形式
- String object(文字列オブジェクト) – リテラル文字列と16進数文字列の両方を包含する汎用PDFオブジェクトタイプ
- Escape sequence(エスケープシーケンス) – リテラル文字列内で特殊文字を表すバックスラッシュ接頭辞付きの文字の組み合わせ
- PDFDocEncoding – Unicodeマーカーがない場合のPDFテキスト文字列のデフォルト文字エンコーディング
- Text string(テキスト文字列) – Unicodeエンコーディングをサポートする、人間が読めるテキストに使用される特殊な文字列タイプ
- (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
