String object
String objectは、バイト列または文字列を表すPDFの基本的なデータ型の一つです。
String objectは、バイト列または文字列を表す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
)
によると、PDFはString objectに対して2つの表記法をサポートしています。括弧で囲まれたliteral string (text)と、山括弧で囲まれた16進数文字列 <48656C6C6F>です。String objectはPDF構造の基礎となるもので、テキストコンテンツ、メタデータ、名前、その他のさまざまなデータに使用されます。
PDFにおけるString objectは、文脈に応じてテキスト、バイナリデータ、またはその他の情報を表すことができる一連のバイト列です。多くのプログラミング言語の文字列とは異なり、PDFの文字列は本質的にUnicodeではありません。文脈や明示的なエンコーディングマーカーに基づいて、ASCII、PDFDocEncoding、UTF-16BE、またはその他のエンコーディングとして解釈されます。
Literal stringは括弧を区切り文字として使用し、改行を表す\nやリテラルな括弧を表す\(などのエスケープシーケンスをサポートします。例:(Hello World)または(Line 1\nLine 2)。16進数文字列は、山括弧内で各バイトを2桁の16進数として表現します。例えば<48656C6C6F>はASCIIで"Hello"を表します。16進数表記は、バイナリデータや正確なバイト値を曖昧さなく指定する必要がある場合に特に便利です。
String objectは、Name object(/Typeのようなスラッシュ表記を使用)とは異なります。文字列はデータ値を表すのに対し、名前はPDF辞書内の識別子やキーを表します。また、String objectはText stringとも異なります。Text stringは、定義されたエンコーディング要件を持つ人間が読めるテキストを表すString objectの特定のサブセットです。
String objectは、PDF文書全体のさまざまな文脈で使用されるため、PDF開発者にとって不可欠です。ページに表示されるテキストコンテンツはString objectを使用し、文書のタイトルや著者などのメタデータフィールドは文字列として保存され、パスワードなどのセキュリティ機能は文字列エンコーディングに依存しています。
PDFからテキストを抽出する場合や、アクセシブルな文書を作成する場合、文字列エンコーディングの理解は非常に重要です。文字列エンコーディングの不適切な処理は、文字化け、テキスト検索の失敗、またはスクリーンリーダーがコンテンツを適切に解釈できないというアクセシビリティの問題を引き起こす可能性があります。国際的なコンテンツを扱う開発者は、Unicodeテキストを示すUTF-16BEのバイトオーダーマーク(þÿ)などのエンコーディングマーカーに特に注意を払う必要があります。
プログラムでPDFを作成または変更する際、literal stringと16進数文字列表記のどちらを選択するかは、ファイルサイズと可読性の両方に影響します。16進数文字列はファイルサイズが大きくなりますが正確なバイト制御が可能です。一方、literal stringはよりコンパクトで人間が読みやすいですが、特殊文字の適切なエスケープが必要です。
Literal stringは(で始まり)で終わり、その間に文字列の内容が配置されます。特殊文字にはエスケープシーケンスが必要です。改行はバックスラッシュn、キャリッジリターンはバックスラッシュr、タブはバックスラッシュt、リテラルなバックスラッシュは二重バックスラッシュです。対応する括弧はliteral string内でエスケープなしで使用できますが、対応しない括弧は\(または\)としてエスケープする必要があります。
16進数文字列は、山括弧内で各バイトを2桁の16進数(0-9、A-F)としてエンコードします。例えば、<4142>はバイト0x41と0x42(ASCII “AB”)を表します。16進数文字列内の空白は無視され、奇数桁の場合は末尾にゼロが追加されます。
文字列の解釈は文脈に依存します。テキスト表示演算子の場合、文字列はPDFDocEncoding(ISO Latin-1のスーパーセット)またはバイトオーダーマーク付きのUTF-16BEを使用することがあります。文書情報辞書のエントリは通常、PDFDocEncodingまたはUTF-16BEを使用します。オブジェクト名や特定の技術フィールドはASCIIを使用します。開発者は、各文脈で期待されるエンコーディングについて ( 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バイトシーケンス<FE FF>(literal表記ではþÿ)で始まる場合、これはUTF-16BEエンコーディングを示し、完全なUnicode文字表現が可能になります。これは国際化と非ラテン文字の適切な処理に不可欠です。
- Name object – 辞書のキーとして使用される原子的な識別子で、スラッシュが前に付く
- Text string – 定義されたエンコーディングを持つ人間が読めるテキストを目的としたString object
- Stream object – 限られたString objectとは異なり、大量のデータを含むことができるバイト列
- Dictionary object – キーと値のペアの集合で、キーはName objectで、値はString objectを含むことができる
- Content stream – ページコンテンツをレンダリングするための命令とデータを含むストリームで、String objectを含むことがある
- (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
